From: Howard Chu Date: Sat, 24 Nov 2007 11:33:04 +0000 (+0000) Subject: Fix connection teardown X-Git-Tag: OPENLDAP_REL_ENG_2_4_9~20^2~395 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=e8d7074802b5ebb56aabcd4b157a75a338dba4c3;p=openldap Fix connection teardown --- diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 1b8f87381f..8ba1911ca1 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -657,6 +657,7 @@ connection_destroy( Connection *c ) unsigned long connid; const char *close_reason; Sockbuf *sb; + ber_socket_t sd; assert( connections != NULL ); assert( c != NULL ); @@ -719,6 +720,8 @@ connection_destroy( Connection *c ) } #endif + sd = c->c_sd; + c->c_sd = AC_SOCKET_INVALID; c->c_conn_state = SLAP_C_INVALID; c->c_struct_state = SLAP_C_UNUSED; c->c_close_reason = "?"; /* should never be needed */ @@ -733,17 +736,16 @@ connection_destroy( Connection *c ) /* c must be fully reset by this point; when we call slapd_remove * it may get immediately reused by a new connection. */ - if ( c->c_sd != AC_SOCKET_INVALID ) { - slapd_remove( c->c_sd, sb, 1, 0, 0 ); + if ( sd != AC_SOCKET_INVALID ) { + slapd_remove( sd, sb, 1, 0, 0 ); if ( close_reason == NULL ) { Statslog( LDAP_DEBUG_STATS, "conn=%lu fd=%ld closed\n", - connid, (long) c->c_sd, 0, 0, 0 ); + connid, (long) sd, 0, 0, 0 ); } else { Statslog( LDAP_DEBUG_STATS, "conn=%lu fd=%ld closed (%s)\n", - connid, (long) c->c_sd, close_reason, 0, 0 ); + connid, (long) sd, close_reason, 0, 0 ); } - c->c_sd = AC_SOCKET_INVALID; } }