[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#6039) Windows sockets initialization and shutdown bugs in slapd



Full_Name: Test Seven
Version: 2.4.15
OS: Windows
URL: 
Submission from: (NULL) (195.113.184.20)


I'm afraid slapd won't run on Windows without the first half of the following
patch. AppVerifier will choke on double tcp_close() without the second part.

--- daemon.c.orig	2009-02-13 03:35:40.000000000 +0100
+++ daemon.c	2009-03-27 09:24:22.515625000 +0100
@@ -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);  /* Don't forget to initialize
this, used in slapd_add() called from slapd_daemon_task() */ \
 	slapd_ws_sockets[0] = wake_sds[0]; \
 	slapd_ws_sockets[1] = wake_sds[1]; \
 	wake_sds[0] = 0; \
@@ -1646,7 +1647,7 @@ 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