From: Howard Chu Date: Thu, 14 May 2009 04:03:23 +0000 (+0000) Subject: ITS#6111 connection_state_closing() -> connection_valid() X-Git-Tag: ACLCHECK_0~557 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=aa9e2415814fdee9cb2bc30a0f9ef84b3f2ece84;p=openldap ITS#6111 connection_state_closing() -> connection_valid() --- diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index bab511c586..4e5ccd5fbd 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -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 ) diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 0b86092a38..f8212bc7e8 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -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)); diff --git a/servers/slapd/result.c b/servers/slapd/result.c index 63332dac17..8bbddad96f 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -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; }