]> 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 03559d6288a9742454d5ef0068c8ea5b350f3b56..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)
@@ -339,7 +351,7 @@ static struct slap_daemon {
 static char** slapd_srvurls = NULL;
 static SLPHandle slapd_hslp = 0;
 int slapd_register_slp = 0;
-char *slapd_slp_attrs = NULL;
+const char *slapd_slp_attrs = NULL;
 
 static SLPError slapd_slp_cookie;
 
@@ -501,6 +513,7 @@ void slapd_sd_unlock()
  */
 void slapd_remove(
        ber_socket_t s,
+       Sockbuf *sb,
        int wasactive,
        int wake,
        int locked )
@@ -527,6 +540,9 @@ void slapd_remove(
 
        SLAP_DEL_SOCK(s);
 
+       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
         * control, we can try to resume a dropped listener to use.
@@ -1262,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 ) {
@@ -2315,6 +2331,8 @@ static int sockdestroy(void)
 #if defined( HAVE_WINSOCK2 ) || defined( HAVE_WINSOCK )
        WSACleanup();
 #endif
+       SLAP_SOCK_SET_DESTROY;
+
        return 0;
 }