return c;
fail:
if ( c->c_write_event ) {
- event_del( c->c_write_event );
event_free( c->c_write_event );
+ c->c_write_event = NULL;
}
if ( c->c_read_event ) {
- event_del( c->c_read_event );
event_free( c->c_read_event );
+ c->c_read_event = NULL;
}
c->c_state = SLAP_C_INVALID;
connection_destroy( c );
c->c_connid );
if ( c->c_read_event ) {
- event_del( c->c_read_event );
event_free( c->c_read_event );
+ c->c_read_event = NULL;
}
if ( c->c_write_event ) {
- event_del( c->c_write_event );
event_free( c->c_write_event );
+ c->c_write_event = NULL;
}
c->c_state = SLAP_C_INVALID;
* event_del will block if the event is currently executing its callback,
* that callback might be waiting to lock c->c_mutex
*/
- event_del( read_event );
- event_free( read_event );
+ if ( read_event ) {
+ event_del( read_event );
+ }
- event_del( write_event );
- event_free( write_event );
+ if ( write_event ) {
+ event_del( write_event );
+ }
ldap_pvt_thread_mutex_lock( &b->b_mutex );
LDAP_LIST_REMOVE( c, c_next );
CONNECTION_LOCK_DECREF(c);
+ if ( c->c_read_event ) {
+ event_free( c->c_read_event );
+ c->c_read_event = NULL;
+ }
+
+ if ( c->c_write_event ) {
+ event_free( c->c_write_event );
+ c->c_write_event = NULL;
+ }
+
/*
* If we attempted to destroy any operations, we might have lent a new
* refcnt token for a thread that raced us to that, let them call us again