return 0;
}
-static void
-destroy_listeners( void )
+void
+lloadd_listeners_destroy( void )
{
LloadListener *l, **ll = lload_listeners;
if ( ll == NULL ) return;
- ldap_pvt_thread_join( listener_tid, (void *)NULL );
-
while ( (l = *ll++) != NULL ) {
lload_listener_free( l );
}
"Main event loop finished: rc=%d\n",
rc );
- /* shutdown */
- event_base_loopexit( listener_base, 0 );
+ /* Shutdown: */
/* wait for the listener threads to complete */
- destroy_listeners();
+ event_base_loopexit( listener_base, 0 );
+ ldap_pvt_thread_join( listener_tid, (void *)NULL );
/* Mark upstream connections closing and prevent from opening new ones */
lload_tiers_shutdown();
lload_tiers_destroy();
clients_destroy( 0 );
- lload_bindconf_free( &bindconf );
evdns_base_free( dnsbase, 0 );
ch_free( daemon_tid );
ch_free( lloadd_identity.bv_val );
BER_BVZERO( &lloadd_identity );
}
+ lload_bindconf_free( &bindconf );
lload_exop_destroy();
ldap_tavl_free( lload_control_actions, (AVL_FREE)lload_restriction_free );
ldap_tavl_free( lload_exop_actions, (AVL_FREE)lload_restriction_free );
+ lloadd_listeners_destroy();
+ /* All closed at shutdown but tools don't go through shutdown */
+ lload_tiers_destroy();
+
#ifdef HAVE_TLS
if ( lload_tls_backend_ld ) {
ldap_unbind_ext( lload_tls_backend_ld, NULL, NULL );
LDAP_SLAPD_F (LloadListener *) lload_configure_listener( const char *url, LDAPURLDesc *lud );
LDAP_SLAPD_F (int) lload_open_new_listener( LloadListener *lr );
LDAP_SLAPD_F (int) lloadd_listeners_init( const char *urls );
+LDAP_SLAPD_F (void) lloadd_listeners_destroy( void );
LDAP_SLAPD_F (int) lloadd_daemon_destroy( void );
LDAP_SLAPD_F (int) lloadd_daemon( struct event_base *daemon_base );
LDAP_SLAPD_F (LloadListener **) lloadd_get_listeners( void );