[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#6993) Backend Connection problem



> Full_Name: Yann Carre
> Version: 2.4.26
> OS: red hat 5 (64 bits)
> URL: ftp://ftp.openldap.org/incoming/
> Submission from: (NULL) (64.208.49.20)
>
>
> I work on a specific Backend
> I have provided in my back end a function to the bi_connection_init
> pointer.
> This function adds a context needed in the operation backend function
> (search,
> ...)
>
> When several connections start up, my LDAP server crashes.
> The crash arrives because the context is not created before the call to
> do_searh.
> The connection is provided to the application Backend before my Back end
> connection_init.
> I have checked it with the debugger and see that the thread with
> initialize the
> connection is suspend before the backend connection_init. In another
> thread, the
> search function is executed without any context attached to the
> connection.
>
> This problem seems to be bring because the connection mutex is freed
> before the
> calling of the Back end connection_init in the function connection_init
> (connection.c).
>
> I have moved this mutex after the backend connection_init and it seems to
> work.
>
> Would you confirm this analysis and take the correction in account?

Honestly, if that context you mention is connection-specific, I don't see
how this could happen, since operations on that connection should not be
possible until connection_init() returns.

OTOH, if the context is global, you should initialize it differently, and
protect it from being used before its initialization is complete, e.g. by
a specific mutex that is completely internal to your backend.

In any case, it is not clear how this can be an OpenLDAP bug.  You should
provide a clearer evidence.  In the absence, I'd consider this ITS closed.

p.