CONNECTION_UNLOCK_INCREF(client);
if ( detach_client ) {
- ldap_pvt_thread_mutex_lock( &operation_mutex );
+ ldap_pvt_thread_mutex_lock( &op->o_link_mutex );
op->o_client = NULL;
- ldap_pvt_thread_mutex_unlock( &operation_mutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_link_mutex );
}
/* 4. If we lost the race, deal with it straight away */
}
/* 5. If we raced the upstream side and won, reclaim the token */
- ldap_pvt_thread_mutex_lock( &operation_mutex );
+ ldap_pvt_thread_mutex_lock( &op->o_link_mutex );
if ( !(race_state & SLAP_OP_DETACHING_UPSTREAM) ) {
upstream = op->o_upstream;
if ( upstream ) {
CONNECTION_LOCK(upstream);
}
}
- ldap_pvt_thread_mutex_unlock( &operation_mutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_link_mutex );
ldap_pvt_thread_mutex_lock( &op->o_mutex );
/* We don't actually resolve the race in full until we grab the other's
op, op->o_client_connid, op->o_client_msgid );
ber_free( op->o_ber, 1 );
ldap_pvt_thread_mutex_destroy( &op->o_mutex );
+ ldap_pvt_thread_mutex_destroy( &op->o_link_mutex );
ch_free( op );
CONNECTION_LOCK_DECREF(client);
CONNECTION_UNLOCK_INCREF(upstream);
/* 3. Detect whether we entered a race to free op */
- ldap_pvt_thread_mutex_lock( &operation_mutex );
+ ldap_pvt_thread_mutex_lock( &op->o_link_mutex );
if ( detach_upstream ) {
op->o_upstream = NULL;
}
- ldap_pvt_thread_mutex_unlock( &operation_mutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_link_mutex );
if ( b ) {
ldap_pvt_thread_mutex_lock( &b->b_mutex );
}
/* 5. If we raced the client side and won, reclaim the token */
- ldap_pvt_thread_mutex_lock( &operation_mutex );
+ ldap_pvt_thread_mutex_lock( &op->o_link_mutex );
if ( !(race_state & SLAP_OP_DETACHING_CLIENT) ) {
client = op->o_client;
if ( client ) {
CONNECTION_LOCK(client);
}
}
- ldap_pvt_thread_mutex_unlock( &operation_mutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_link_mutex );
/* We don't actually resolve the race in full until we grab the other's
* c_mutex+op->o_mutex here */
op, op->o_client_connid, op->o_client_msgid );
ber_free( op->o_ber, 1 );
ldap_pvt_thread_mutex_destroy( &op->o_mutex );
+ ldap_pvt_thread_mutex_destroy( &op->o_link_mutex );
ch_free( op );
CONNECTION_LOCK_DECREF(upstream);
op->o_ber = ber;
ldap_pvt_thread_mutex_init( &op->o_mutex );
+ ldap_pvt_thread_mutex_init( &op->o_link_mutex );
op->o_client_live = op->o_client_refcnt = 1;
op->o_upstream_live = op->o_upstream_refcnt = 1;
Backend *b;
int rc;
- ldap_pvt_thread_mutex_lock( &operation_mutex );
+ ldap_pvt_thread_mutex_lock( &op->o_link_mutex );
c = op->o_upstream;
if ( !c ) {
- ldap_pvt_thread_mutex_unlock( &operation_mutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_link_mutex );
goto done;
}
CONNECTION_LOCK(c);
- ldap_pvt_thread_mutex_unlock( &operation_mutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_link_mutex );
if ( tavl_delete( &c->c_ops, op, operation_upstream_cmp ) == NULL ) {
/* The operation has already been abandoned or finished */
goto unlock;
"rejecting %s from client connid=%lu with message: \"%s\"\n",
slap_msgtype2str( op->o_tag ), op->o_client_connid, msg );
- ldap_pvt_thread_mutex_lock( &operation_mutex );
+ ldap_pvt_thread_mutex_lock( &op->o_link_mutex );
c = op->o_client;
if ( !c ) {
c = op->o_upstream;
* client is dead, it must have been the upstream */
assert( c );
CONNECTION_LOCK(c);
- ldap_pvt_thread_mutex_unlock( &operation_mutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_link_mutex );
Debug( LDAP_DEBUG_TRACE, "operation_send_reject: "
"not sending msgid=%d, client connid=%lu is dead\n",
op->o_client_msgid, op->o_client_connid );
return;
}
CONNECTION_LOCK(c);
- ldap_pvt_thread_mutex_unlock( &operation_mutex );
+ ldap_pvt_thread_mutex_unlock( &op->o_link_mutex );
found = ( tavl_delete( &c->c_ops, op, operation_client_cmp ) == op );
if ( !found && !send_anyway ) {