]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/daemon.c
- setup framework for monitoring of back-bdb/back-hdb stuff in their
[openldap] / servers / slapd / daemon.c
index 7e8dca9508ad45124967416f224779a63dc7f03c..31596c4846bdc572bed4d7016f02fc0198375154 100644 (file)
@@ -235,6 +235,16 @@ static struct slap_daemon {
        for (i=0; i<dtblsize; i++) slap_daemon.sd_index[i] = -1; \
 } while (0)
 
+#define SLAP_SOCK_SET_DESTROY do { \
+       if ( slap_daemon.sd_epolls != NULL ) { \
+               ch_free( slap_daemon.sd_epolls ); \
+               slap_daemon.sd_epolls = NULL; \
+               ch_free( slap_daemon.sd_index ); \
+               slap_daemon.sd_index = NULL; \
+               close( slap_daemon.sd_epfd ); \
+       } \
+} while ( 0 )
+
 # define SLAP_EVENT_DECL struct epoll_event *revents
 
 # define SLAP_EVENT_INIT do { \
@@ -275,6 +285,8 @@ static struct slap_daemon {
        FD_ZERO(&slap_daemon.sd_writers); \
 } while (0)
 
+#define                SLAP_SOCK_SET_DESTROY
+
 # define SLAP_SOCK_IS_ACTIVE(fd)       FD_ISSET((fd), &slap_daemon.sd_actives)
 # define SLAP_SOCK_IS_READ(fd)         FD_ISSET((fd), &slap_daemon.sd_readers)
 # define SLAP_SOCK_IS_WRITE(fd)                FD_ISSET((fd), &slap_daemon.sd_writers)
@@ -528,7 +540,8 @@ void slapd_remove(
 
        SLAP_DEL_SOCK(s);
 
-       ber_sockbuf_free(sb);
+       if ( sb )
+               ber_sockbuf_free(sb);
 
        /* If we ran out of file descriptors, we dropped a listener from
         * the select() loop. Now that we're removing a session from our
@@ -1265,7 +1278,7 @@ close_listeners(
                Listener *lr = slap_listeners[l];
 
                if ( lr->sl_sd != AC_SOCKET_INVALID ) {
-                       if ( remove ) slapd_remove( lr->sl_sd, 0, 0, 0 );
+                       if ( remove ) slapd_remove( lr->sl_sd, NULL, 0, 0, 0 );
 
 #ifdef LDAP_PF_LOCAL
                        if ( lr->sl_sa.sa_addr.sa_family == AF_LOCAL ) {
@@ -2318,6 +2331,8 @@ static int sockdestroy(void)
 #if defined( HAVE_WINSOCK2 ) || defined( HAVE_WINSOCK )
        WSACleanup();
 #endif
+       SLAP_SOCK_SET_DESTROY;
+
        return 0;
 }