From: Kurt Zeilenga Date: Thu, 8 Apr 1999 03:57:25 +0000 (+0000) Subject: Changes to support FreeBSD LinuxThreads port. Namely don't rely X-Git-Tag: OPENLDAP_SLAPD_BACK_LDAP~221 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6743aebf3d95a4db77cae5bd335ae5d8fe8aacab;p=openldap Changes to support FreeBSD LinuxThreads port. Namely don't rely on errno not getting changed by Debug(). Likely a problem elsewhere. Tests run okay, excepting concurrency has "no such object" problems. --- diff --git a/build/openldap.m4 b/build/openldap.m4 index ce9f5f4611..b7067667f5 100644 --- a/build/openldap.m4 +++ b/build/openldap.m4 @@ -478,7 +478,7 @@ AC_DEFUN([OL_PTHREAD_TRY_LINK], [# Pthread try link: $1 ($2) # try $1 AC_CACHE_CHECK([for pthread link with $1], [$2], [ # save the flags - save_LIBS="$LIBS" + ol_LIBS="$LIBS" LIBS="$1 $LIBS" AC_TRY_LINK([ @@ -502,7 +502,7 @@ AC_DEFUN([OL_PTHREAD_TRY_LINK], [# Pthread try link: $1 ($2) ], [$2=yes], [$2=no]) # restore the LIBS - LIBS="$save_LIBS" + LIBS="$ol_LIBS" ]) if test $$2 = yes ; then diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 0ca6909871..2e7a7604d3 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -592,8 +592,8 @@ int connection_read(int s) if( rc < 0 ) { Debug( LDAP_DEBUG_TRACE, - "connection_read(%d): input error id=%ld, closing.\n", - s, c->c_connid, 0 ); + "connection_read(%d): input error=%d id=%ld, closing.\n", + s, rc, c->c_connid ); connection_closing( c ); connection_close( c ); @@ -624,21 +624,23 @@ connection_input( if ( (tag = ber_get_next( &conn->c_sb, &len, conn->c_currentber )) != LDAP_TAG_MESSAGE ) { + int err = errno; + Debug( LDAP_DEBUG_TRACE, "ber_get_next on fd %d failed errno %d (%s)\n", - lber_pvt_sb_get_desc(&conn->c_sb), errno, - errno > -1 && errno < sys_nerr ? sys_errlist[errno] : "unknown" ); + lber_pvt_sb_get_desc(&conn->c_sb), err, + err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown" ); Debug( LDAP_DEBUG_TRACE, "\t*** got %ld of %lu so far\n", (long)(conn->c_currentber->ber_rwptr - conn->c_currentber->ber_buf), conn->c_currentber->ber_len, 0 ); - if ( errno != EWOULDBLOCK && errno != EAGAIN ) { + if ( err != EWOULDBLOCK && err != EAGAIN ) { /* log, close and send error */ ber_free( conn->c_currentber, 1 ); conn->c_currentber = NULL; - return -1; + return -2; } return 1; } diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index 01d909b16c..f1c44505c5 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -178,9 +178,10 @@ set_socket( struct sockaddr_in *addr ) int tmp; if ( (tcps = socket( AF_INET, SOCK_STREAM, 0 )) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, - "daemon: socket() failed errno %d (%s)\n", errno, - errno > -1 && errno < sys_nerr ? sys_errlist[errno] : + "daemon: socket() failed errno %d (%s)\n", err, + err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); exit( 1 ); } @@ -198,20 +199,20 @@ set_socket( struct sockaddr_in *addr ) if ( setsockopt( tcps, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, sizeof(tmp) ) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, "slapd(%d): setsockopt() failed errno %d (%s)\n", - tcps, errno, - errno > -1 && errno < sys_nerr - ? sys_errlist[errno] : "unknown" ); - - errno = 0; + tcps, err, + err > -1 && err < sys_nerr + ? sys_errlist[err] : "unknown" ); } if ( bind( tcps, (struct sockaddr *) addr, sizeof(*addr) ) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, "daemon: bind(%d) failed errno %d (%s)\n", - tcps, errno, - errno > -1 && errno < sys_nerr - ? sys_errlist[errno] : "unknown" ); + tcps, err, + err > -1 && err < sys_nerr + ? sys_errlist[err] : "unknown" ); exit( 1 ); } } @@ -236,11 +237,12 @@ slapd_daemon_task( if( !inetd ) { if ( listen( tcps, 5 ) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, "daemon: listen(%d, 5) failed errno %d (%s)\n", - tcps, errno, - errno > -1 && errno < sys_nerr - ? sys_errlist[errno] : "unknown" ); + tcps, err, + err > -1 && err < sys_nerr + ? sys_errlist[err] : "unknown" ); exit( 1 ); } @@ -321,18 +323,19 @@ slapd_daemon_task( ldap_pvt_thread_mutex_unlock( &active_threads_mutex ); switch(ns = select( nfds, &readfds, &writefds, 0, tvp )) { - case -1: /* failure - try again */ - if( errno != EINTR ) { - Debug( LDAP_DEBUG_CONNS, - "daemon: select failed (%d): %s\n", - errno, - errno >= 0 && errno < sys_nerr - ? sys_errlist[errno] : "unknown", - 0 ); - - slapd_shutdown = -1; + case -1: { /* failure - try again */ + int err = errno; + if( err != EINTR ) { + Debug( LDAP_DEBUG_CONNS, + "daemon: select failed (%d): %s\n", + err, + err >= 0 && err < sys_nerr + ? sys_errlist[err] : "unknown", + 0 ); + + slapd_shutdown = -1; + } } - errno = 0; continue; case 0: /* timeout - let threads run */ @@ -355,10 +358,11 @@ slapd_daemon_task( if ( (s = accept( tcps, (struct sockaddr *) &from, &len )) == -1 ) { + int err = errno; Debug( LDAP_DEBUG_ANY, - "daemon: accept(%d) failed errno %d (%s)\n", errno, - tcps, errno >= 0 && errno < sys_nerr ? - sys_errlist[errno] : "unknown"); + "daemon: accept(%d) failed errno %d (%s)\n", err, + tcps, err >= 0 && err < sys_nerr ? + sys_errlist[err] : "unknown"); continue; } @@ -551,13 +555,13 @@ slapd_daemon_task( if( slapd_shutdown > 0 ) { Debug( LDAP_DEBUG_TRACE, - "daemon: shutdown requested and initiated.\n", - 0, 0, 0 ); + "daemon: shutdown requested (%d) and initiated.\n", + (int) slapd_shutdown, 0, 0 ); } else if ( slapd_shutdown < 0 ) { Debug( LDAP_DEBUG_TRACE, - "daemon: abnormal condition, shutdown initiated.\n", - 0, 0, 0 ); + "daemon: abnormal condition (%d), shutdown initiated.\n", + (int) slapd_shutdown, 0, 0 ); } else { Debug( LDAP_DEBUG_TRACE, "daemon: no active streams, shutdown initiated.\n", @@ -605,7 +609,7 @@ int slapd_daemon( int inetd, int tcps ) void slap_set_shutdown( int sig ) { - slapd_shutdown = 1; + slapd_shutdown = sig; ldap_pvt_thread_kill( listener_tid, LDAP_SIGUSR1 ); /* reinstall self */ diff --git a/servers/slapd/result.c b/servers/slapd/result.c index 17f454ac83..9a12891f71 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -97,6 +97,7 @@ send_ldap_result2( bytes = ber->ber_ptr - ber->ber_buf; while ( ber_flush( &conn->c_sb, ber, 1 ) != 0 ) { + int err = errno; /* * we got an error. if it's ewouldblock, we need to * wait on the socket being writable. otherwise, figure @@ -104,10 +105,10 @@ send_ldap_result2( */ Debug( LDAP_DEBUG_CONNS, "ber_flush failed errno %d msg (%s)\n", - errno, errno > -1 && errno < sys_nerr ? sys_errlist[errno] + err, err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); - if ( errno != EWOULDBLOCK && errno != EAGAIN ) { + if ( err != EWOULDBLOCK && err != EAGAIN ) { connection_closing( conn ); ldap_pvt_thread_mutex_unlock( &conn->c_mutex ); @@ -325,6 +326,7 @@ send_search_entry( /* write the pdu */ while ( ber_flush( &conn->c_sb, ber, 1 ) != 0 ) { + int err = errno; /* * we got an error. if it's ewouldblock, we need to * wait on the socket being writable. otherwise, figure @@ -332,10 +334,10 @@ send_search_entry( */ Debug( LDAP_DEBUG_CONNS, "ber_flush failed errno %d msg (%s)\n", - errno, errno > -1 && errno < sys_nerr ? sys_errlist[errno] + err, err > -1 && err < sys_nerr ? sys_errlist[err] : "unknown", 0 ); - if ( errno != EWOULDBLOCK && errno != EAGAIN ) { + if ( err != EWOULDBLOCK && err != EAGAIN ) { connection_closing( conn ); ldap_pvt_thread_mutex_unlock( &conn->c_mutex );