From 2b0bccc74c407e21057455a30442e3d287764e24 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Fri, 20 Jan 2006 08:13:54 +0000 Subject: [PATCH] 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). --- servers/slapd/daemon.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) 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; -- 2.39.5