]> git.sur5r.net Git - openldap/commitdiff
ITS#6111 connection_state_closing() -> connection_valid()
authorHoward Chu <hyc@openldap.org>
Thu, 14 May 2009 04:03:23 +0000 (04:03 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 14 May 2009 04:03:23 +0000 (04:03 +0000)
servers/slapd/connection.c
servers/slapd/proto-slap.h
servers/slapd/result.c

index bab511c586f098110b6dbd6371d68d1bdf6073b5..4e5ccd5fbdd1890216de452c14855885e2837a3b 100644 (file)
@@ -53,18 +53,22 @@ static unsigned long conn_nextid = 0;
 static const char conn_lost_str[] = "connection lost";
 
 /* structure state (protected by connections_mutex) */
-#define SLAP_C_UNINITIALIZED   0x00    /* MUST BE ZERO (0) */
-#define SLAP_C_UNUSED                  0x01
-#define SLAP_C_USED                            0x02
-#define        SLAP_C_PENDING                  0x03
+enum sc_struct_state {
+       SLAP_C_UNINITIALIZED = 0,       /* MUST BE ZERO (0) */
+       SLAP_C_UNUSED,
+       SLAP_C_USED,
+       SLAP_C_PENDING
+};
 
 /* connection state (protected by c_mutex ) */
-#define SLAP_C_INVALID                 0x00    /* MUST BE ZERO (0) */
-#define SLAP_C_INACTIVE                        0x01    /* zero threads */
-#define SLAP_C_ACTIVE                  0x02    /* one or more threads */
-#define SLAP_C_BINDING                 0x03    /* binding */
-#define SLAP_C_CLOSING                 0x04    /* closing */
-#define SLAP_C_CLIENT                  0x05    /* outbound client conn */
+enum sc_conn_state {
+       SLAP_C_INVALID = 0,             /* MUST BE ZERO (0) */
+       SLAP_C_INACTIVE,                /* zero threads */
+       SLAP_C_CLOSING,                 /* closing */
+       SLAP_C_ACTIVE,                  /* one or more threads */
+       SLAP_C_BINDING,                 /* binding */
+       SLAP_C_CLIENT                   /* outbound client conn */
+};
 
 const char *
 connection_state2str( int state )
@@ -72,9 +76,9 @@ connection_state2str( int state )
        switch( state ) {
        case SLAP_C_INVALID:    return "!";
        case SLAP_C_INACTIVE:   return "|";
+       case SLAP_C_CLOSING:    return "C";
        case SLAP_C_ACTIVE:             return "";
        case SLAP_C_BINDING:    return "B";
-       case SLAP_C_CLOSING:    return "C";
        case SLAP_C_CLIENT:             return "L";
        }
 
@@ -695,19 +699,15 @@ connection_destroy( Connection *c )
        }
 }
 
-int connection_state_closing( Connection *c )
+int connection_valid( Connection *c )
 {
        /* c_mutex must be locked by caller */
 
-       int state;
        assert( c != NULL );
-       assert( c->c_struct_state == SLAP_C_USED );
-
-       state = c->c_conn_state;
-
-       assert( state != SLAP_C_INVALID );
 
-       return state == SLAP_C_CLOSING;
+       return c->c_struct_state == SLAP_C_USED &&
+               c->c_conn_state >= SLAP_C_ACTIVE &&
+               c->c_conn_state <= SLAP_C_CLIENT;
 }
 
 static void connection_abandon( Connection *c )
index 0b86092a3814426fa43b12b0501748fce886f227..f8212bc7e8a906736cbc6b0d65ddcd2be5c8ff30 100644 (file)
@@ -759,7 +759,7 @@ 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_state_closing LDAP_P(( Connection *c ));
+LDAP_SLAPD_F (int) connection_valid LDAP_P(( Connection *c ));
 LDAP_SLAPD_F (const char *) connection_state2str LDAP_P(( int state ))
        LDAP_GCCATTR((const));
 
index 63332dac17f646d354966dd90f97278bf3c70c6b..8bbddad96f2e0af28c724dc3491b9ea4072e4686 100644 (file)
@@ -145,7 +145,7 @@ static long send_ldap_ber(
 
        /* write only one pdu at a time - wait til it's our turn */
        ldap_pvt_thread_mutex_lock( &conn->c_write1_mutex );
-       if (( op->o_abandon && !op->o_cancel ) || connection_state_closing( conn )) {
+       if (( op->o_abandon && !op->o_cancel ) || !connection_valid( conn )) {
                ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex );
                return 0;
        }