Free all pending operations on shutdown

This commit is contained in:
Ondřej Kuzník 2017-05-25 15:04:42 +01:00 committed by Ondřej Kuzník
parent cf05722b6c
commit e0b8bd5fc9

View File

@ -314,12 +314,45 @@ backends_destroy( void )
while ( !LDAP_CIRCLEQ_EMPTY( &b->b_bindconns ) ) {
Connection *c = LDAP_CIRCLEQ_FIRST( &b->b_bindconns );
TAvlnode *root;
long freed;
CONNECTION_LOCK(c);
Debug( LDAP_DEBUG_CONNS, "backends_destroy: "
"destroying bind connection connid=%lu, pending ops=%ld\n",
c->c_connid, c->c_n_ops_executing );
root = c->c_ops;
c->c_ops = NULL;
CONNECTION_UNLOCK_INCREF(c);
freed = tavl_free( root, (AVL_FREE)operation_lost_upstream );
CONNECTION_LOCK_DECREF(c);
assert( freed == c->c_n_ops_executing );
assert( c->c_live );
UPSTREAM_DESTROY(c);
}
while ( !LDAP_CIRCLEQ_EMPTY( &b->b_conns ) ) {
Connection *c = LDAP_CIRCLEQ_FIRST( &b->b_conns );
TAvlnode *root;
long freed;
CONNECTION_LOCK(c);
Debug( LDAP_DEBUG_CONNS, "backends_destroy: "
"destroying regular connection connid=%lu, pending "
"ops=%ld\n",
c->c_connid, c->c_n_ops_executing );
root = c->c_ops;
c->c_ops = NULL;
CONNECTION_UNLOCK_INCREF(c);
freed = tavl_free( root, (AVL_FREE)operation_lost_upstream );
CONNECTION_LOCK_DECREF(c);
assert( freed == c->c_n_ops_executing );
assert( c->c_live );
UPSTREAM_DESTROY(c);
}