mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-24 13:24:56 +08:00
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:
parent
05088318df
commit
2b0bccc74c
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user