]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/daemon.c
ITS#6132
[openldap] / servers / slapd / daemon.c
index fe87e196a4629a031e221c75bf981834214175eb..a7cd6d983736bfe3bd6c22b2cbfd6130d827ad26 100644 (file)
@@ -537,6 +537,7 @@ static struct slap_daemon {
        slap_daemon.sd_flags = (char *)(slapd_ws_sockets + dtblsize); \
        slap_daemon.sd_rflags = slap_daemon.sd_flags + dtblsize; \
        memset( slapd_ws_sockets, -1, dtblsize * sizeof(SOCKET) ); \
+       memset( slap_daemon.sd_flags, 0, dtblsize ); \
        slapd_ws_sockets[0] = wake_sds[0]; \
        slapd_ws_sockets[1] = wake_sds[1]; \
        wake_sds[0] = 0; \
@@ -1646,7 +1647,8 @@ slapd_daemon_destroy( void )
 {
        connections_destroy();
 #ifdef HAVE_WINSOCK
-       if ( wake_sds[1] != INVALID_SOCKET && wake_sds[1] != wake_sds[0] )
+       if ( wake_sds[1] != INVALID_SOCKET &&
+               SLAP_FD2SOCK( wake_sds[1] ) != SLAP_FD2SOCK( wake_sds[0] ))
 #endif /* HAVE_WINSOCK */
                tcp_close( SLAP_FD2SOCK(wake_sds[1]) );
 #ifdef HAVE_WINSOCK
@@ -2727,6 +2729,8 @@ sockdestroy( void )
 RETSIGTYPE
 slap_sig_shutdown( int sig )
 {
+       int save_errno = errno;
+
 #if 0
        Debug(LDAP_DEBUG_TRACE, "slap_sig_shutdown: signal %d\n", sig, 0, 0);
 #endif
@@ -2755,15 +2759,21 @@ slap_sig_shutdown( int sig )
 
        /* reinstall self */
        (void) SIGNAL_REINSTALL( sig, slap_sig_shutdown );
+
+       errno = save_errno;
 }
 
 RETSIGTYPE
 slap_sig_wake( int sig )
 {
+       int save_errno = errno;
+
        WAKE_LISTENER(1);
 
        /* reinstall self */
        (void) SIGNAL_REINSTALL( sig, slap_sig_wake );
+
+       errno = save_errno;
 }