From b9678afd888f004798b6bdb758af0981ecffa2cb Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount <quanah@openldap.org> Date: Wed, 29 Apr 2009 02:26:06 +0000 Subject: [PATCH] ITS#6037 --- CHANGES | 1 + servers/slapd/daemon.c | 8 ++++++++ servers/slapd/main.c | 10 ++++------ 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index b8a0f98222..d23def55eb 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,7 @@ OpenLDAP 2.4 Change Log OpenLDAP 2.4.17 Engineering Fixed slapd normalization of updated schema attributes (ITS#5540) + Fixed slapd errno handling (ITS#6037) Build Environment Added test056-monitor (ITS#5540) Added test057-memberof-refint (ITS#5395) diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index fe87e196a4..5d4cbf645a 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -2727,6 +2727,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 +2757,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; } diff --git a/servers/slapd/main.c b/servers/slapd/main.c index fa008ee2cf..b22e8b70f1 100644 --- a/servers/slapd/main.c +++ b/servers/slapd/main.c @@ -1056,13 +1056,12 @@ wait4child( int sig ) int save_errno = errno; #ifdef WNOHANG - errno = 0; + do + errno = 0; #ifdef HAVE_WAITPID - while ( waitpid( (pid_t)-1, NULL, WNOHANG ) > 0 || errno == EINTR ) - ; /* NULL */ + while ( waitpid( (pid_t)-1, NULL, WNOHANG ) > 0 || errno == EINTR ); #else - while ( wait3( NULL, WNOHANG, NULL ) > 0 || errno == EINTR ) - ; /* NULL */ + while ( wait3( NULL, WNOHANG, NULL ) > 0 || errno == EINTR ); #endif #else (void) wait( NULL ); @@ -1072,4 +1071,3 @@ wait4child( int sig ) } #endif /* LDAP_SIGCHLD */ - -- GitLab