> This problem occurs at the end of the connection init.
> At the end of the connection_init, the connection is provided to the
> listener list (through slapd_add_internal call) and then, the connection
> mutex is freed.
> ==> At this point, the connection is available to the listener but the
> back end initialization has not been done.
> The backend_connection_init call is done out of the connection mutex
> If the connection mutex is freed after the connection_init call, all the
> back end should performed their initialization before it could be used
> in the operation
Thank you. I understand your point, and I agree that the connection
initialization is not over until all backends had an opportunity to deal
with it. My concern is about any harm this change may cause to existing
A quick search in official backends and overlays shows that only
slapo-rwm(5) is currently setting this hook. Let alone this possible bug,
this fact triggers something in my mind: bi_connection_init() might not be
the best place for your initialization to occur.
In fact, this is intended to provide something to *all* connections, but a
connection being created does not imply that your backend will be used, so
it may be a waste of resources to initialize your backend for *all*
You might be better off initializing your backend's connections only when
they are actually needed, i.e. each operation within your backend should
(mutex-protected) check whether initialization occurred and, if it didn't,
do it; if it's ongoing, just pause waiting for it to finish.