From: Howard Chu Date: Fri, 20 Jan 2006 08:13:54 +0000 (+0000) Subject: ITS#4357 Solaris occasionally returns ENOSYS when selecting on a descriptor X-Git-Tag: OPENLDAP_REL_ENG_2_4_BP~281 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2b0bccc74c407e21057455a30442e3d287764e24;p=openldap ITS#4357 Solaris occasionally returns ENOSYS when selecting on a descriptor in the midst of closing. Instead of special casing EBADF, ENOSYS, and WSAENOTSOCK, just count if any error occurs two or more times in a row, and log if so. Don't treat any error as fatal unless it occurs many times in a row (SLAPD_EBADF_LIMIT). --- diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index 0e9f220b70..85fbf5f3d8 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -1840,21 +1840,17 @@ slapd_daemon_task( case -1: { /* failure - try again */ int err = sock_errno(); - if( err == EBADF -#ifdef WSAENOTSOCK - /* you'd think this would be EBADF */ - || err == WSAENOTSOCK -#endif - ) { - if (++ebadf < SLAPD_EBADF_LIMIT) - continue; - } - if( err != EINTR ) { - Debug( LDAP_DEBUG_ANY, - "daemon: select failed (%d): %s\n", - err, sock_errstr(err), 0 ); - slapd_shutdown = 2; + ebadf++; + + /* Don't log unless we got it twice in a row */ + if ( !( ebadf & 1 )) { + Debug( LDAP_DEBUG_ANY, + "daemon: select failed count %d err (%d): %s\n", + ebadf, err, sock_errstr(err) ); + } + if ( ebadf >= SLAPD_EBADF_LIMIT ) + slapd_shutdown = 2; } } continue;