]> git.sur5r.net Git - openldap/commitdiff
ITS#6056 partially revert ITS#5886, close sequencing was broken
authorHoward Chu <hyc@openldap.org>
Thu, 28 May 2009 17:46:25 +0000 (17:46 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 28 May 2009 17:46:25 +0000 (17:46 +0000)
servers/slapd/connection.c
servers/slapd/daemon.c
servers/slapd/proto-slap.h

index 4e5ccd5fbdd1890216de452c14855885e2837a3b..bf7f68c1ce1073b3f081bcc8315f870d6051c23f 100644 (file)
@@ -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 )
 {
index 55681f47124044d5e29832d0cd16ac224f9bf808..2fcfcebb5e77f95701a79b9de579d18720e1e8da 100644 (file)
@@ -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 );
                                }
                        }
                }
index 3abb391e0b05fc678b91f8106a444520d6fef0da..8c0115febd2a21a431a0c811c82134e13a184b8b 100644 (file)
@@ -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));