mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-02 13:09:42 -05: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
1 changed files with 10 additions and 14 deletions
|
|
@ -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 a new issue