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).
This commit is contained in:
Howard Chu 2006-01-20 08:13:54 +00:00
parent 05088318df
commit 2b0bccc74c

View File

@ -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;