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.