ITS#6111 connection_state_closing() -> connection_valid()

This commit is contained in:
Howard Chu 2009-05-14 04:03:23 +00:00
parent 29be892cc1
commit aa9e241581
3 changed files with 21 additions and 21 deletions

View 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 )

View 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));

View 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;
}