From 8edeaefe727ba24edb8b84a5599e8108bc63865b Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 28 May 2009 17:46:25 +0000 Subject: [PATCH] ITS#6056 partially revert ITS#5886, close sequencing was broken --- servers/slapd/connection.c | 18 ------------------ servers/slapd/daemon.c | 17 ++++++++--------- servers/slapd/proto-slap.h | 1 - 3 files changed, 8 insertions(+), 28 deletions(-) diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 4e5ccd5fbd..bf7f68c1ce 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -1271,24 +1271,6 @@ int connection_read_activate( ber_socket_t s ) return rc; } -void -connection_hangup( ber_socket_t s ) -{ - Connection *c; - - c = connection_get( s ); - if ( c ) { - if ( c->c_conn_state == SLAP_C_CLIENT ) { - connection_return( c ); - connection_read_activate( s ); - } else { - connection_closing( c, "connection lost" ); - connection_close( c ); - connection_return( c ); - } - } -} - static int connection_read( ber_socket_t s, conn_readinfo *cri ) { diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index 55681f4712..2fcfcebb5e 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -2529,7 +2529,7 @@ slapd_daemon_task( #endif /* LDAP_DEBUG */ for ( i = 0; i < ns; i++ ) { - int rc = 1, fd, w = 0; + int rc = 1, fd, w = 0, r = 0; if ( SLAP_EVENT_IS_LISTENER( i ) ) { rc = slap_listener_activate( SLAP_EVENT_LISTENER( i ) ); @@ -2569,24 +2569,23 @@ slapd_daemon_task( } } /* If event is a read */ - if ( SLAP_EVENT_IS_READ( i ) ) { + if ( SLAP_EVENT_IS_READ( i )) + r = 1; + if ( r || !w ) { Debug( LDAP_DEBUG_CONNS, "daemon: read active on %d\n", fd, 0, 0 ); - SLAP_EVENT_CLR_READ( i ); - connection_read_activate( fd ); - } else if ( !w ) { - Debug( LDAP_DEBUG_CONNS, - "daemon: hangup on %d\n", fd, 0, 0 ); - if ( SLAP_SOCK_IS_ACTIVE( fd )) { + if ( r ) { + SLAP_EVENT_CLR_READ( i ); + } else { #ifdef HAVE_EPOLL /* Don't keep reporting the hangup */ SLAP_EPOLL_SOCK_SET( fd, EPOLLET ); #endif - connection_hangup( fd ); } + connection_read_activate( fd ); } } } diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 3abb391e0b..8c0115febd 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -758,7 +758,6 @@ LDAP_SLAPD_F (Connection *) connection_init LDAP_P(( LDAP_SLAPD_F (void) connection_closing LDAP_P(( Connection *c, const char *why )); -LDAP_SLAPD_F (void) connection_hangup LDAP_P(( ber_socket_t fd )); LDAP_SLAPD_F (int) connection_valid LDAP_P(( Connection *c )); LDAP_SLAPD_F (const char *) connection_state2str LDAP_P(( int state )) LDAP_GCCATTR((const)); -- 2.39.5