diff --git a/servers/slapd/back-shell/fork.c b/servers/slapd/back-shell/fork.c index fc1c0768c356f39d9ce2fd8b38409050db2429be..195daa8d70020e8c9f414bc40b46ab9e673fd0a6 100644 --- a/servers/slapd/back-shell/fork.c +++ b/servers/slapd/back-shell/fork.c @@ -119,17 +119,24 @@ make_surrogate_parent( void ) char control[CMSG_SPACE(sizeof(io))]; } control_un; struct cmsghdr *cmptr; +# endif + + /* clear msghdr */ + memset( &msg, 0, sizeof msg ); + +# ifdef CMSG_SPACE msg.msg_control = control_un.control; msg.msg_controllen = sizeof(control_un.control); # else msg.msg_accrights = (caddr_t) io; msg.msg_accrightslen = sizeof(io); # endif + msg.msg_name = NULL; msg.msg_namelen = 0; msg.msg_iov = &iov; msg.msg_iovlen = 1; - msg.msg_flags = 0; + switch( recvmsg( pair[p][1], &msg, MSG_WAITALL ) ) { case -1: if( errno == EINTR ) @@ -259,6 +266,12 @@ forkandexec( char control[CMSG_SPACE(sizeof(io))]; } control_un; struct cmsghdr *cmptr; +# endif + + /* clear msghdr */ + memset( &msg, 0, sizeof msg ); + +# ifdef CMSG_SPACE msg.msg_control = control_un.control; msg.msg_controllen = sizeof(control_un.control); cmptr = CMSG_FIRSTHDR(&msg); @@ -270,11 +283,12 @@ forkandexec( msg.msg_accrights = (caddr_t) io; msg.msg_accrightslen = sizeof(io); # endif + msg.msg_name = NULL; msg.msg_namelen = 0; msg.msg_iov = &iov; msg.msg_iovlen = 1; - msg.msg_flags = 0; + ldap_pvt_thread_mutex_lock( &shell_surrogate_index_mutex ); i = shell_surrogate_index ^= 1; ldap_pvt_thread_mutex_unlock( &shell_surrogate_index_mutex );