diff --git a/servers/lloadd/backend.c b/servers/lloadd/backend.c index 9101c7b4a9..17d0ec51df 100644 --- a/servers/lloadd/backend.c +++ b/servers/lloadd/backend.c @@ -99,9 +99,10 @@ backend_select( Operation *op ) } void * -backend_connect( Backend *b ) +backend_connect( void *ctx, void *arg ) { struct evutil_addrinfo hints = {}; + Backend *b = arg; #ifdef LDAP_PF_LOCAL if ( b->b_proto == LDAP_PROTO_IPC ) { diff --git a/servers/lloadd/daemon.c b/servers/lloadd/daemon.c index 9388ae8afe..31382e594b 100644 --- a/servers/lloadd/daemon.c +++ b/servers/lloadd/daemon.c @@ -1300,10 +1300,7 @@ slapd_daemon( struct event_base *daemon_base ) } LDAP_STAILQ_FOREACH ( b, &backend, b_next ) { - rc = backend_connect( b ); - if ( rc ) { - return rc; - } + ldap_pvt_thread_pool_submit( &connection_pool, backend_connect, b ); } lloadd_inited = 1; diff --git a/servers/lloadd/proto-slap.h b/servers/lloadd/proto-slap.h index 869dbe9b0b..cb648ad087 100644 --- a/servers/lloadd/proto-slap.h +++ b/servers/lloadd/proto-slap.h @@ -40,7 +40,7 @@ struct config_reply_s; /* config.h */ * backend.c */ -LDAP_SLAPD_F (int) backend_connect( Backend *b ); +LDAP_SLAPD_F (void *) backend_connect( void *ctx, void *arg ); /* * ch_malloc.c diff --git a/servers/lloadd/upstream.c b/servers/lloadd/upstream.c index 9702d5a523..5cc883fdd3 100644 --- a/servers/lloadd/upstream.c +++ b/servers/lloadd/upstream.c @@ -102,6 +102,8 @@ upstream_destroy( Connection *c ) b->b_conns = NULL; ldap_pvt_thread_mutex_unlock( &b->b_lock ); + ldap_pvt_thread_pool_submit( &connection_pool, backend_connect, b ); + ldap_pvt_thread_mutex_lock( &c->c_mutex ); event_del( c->c_read_event );