Debug( LDAP_DEBUG_TRACE, "==> asyncmeta_free_op : other message type" );
}
- connection_op_finish( op );
+ connection_op_finish( op, 1 );
slap_op_free( op, op->o_threadctx );
}
}
void
-connection_op_finish( Operation *op )
+connection_op_finish( Operation *op, int lock )
{
Connection *conn = op->o_conn;
void *memctx_null = NULL;
INCR_OP_COMPLETED( opidx );
- ldap_pvt_thread_mutex_lock( &conn->c_mutex );
+ if ( lock )
+ ldap_pvt_thread_mutex_lock( &conn->c_mutex );
if ( op->o_tag == LDAP_REQ_BIND && conn->c_conn_state == SLAP_C_BINDING )
conn->c_conn_state = SLAP_C_ACTIVE;
conn->c_n_ops_executing--;
conn->c_n_ops_completed++;
connection_resched( conn );
- ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
+ if ( lock )
+ ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
}
static void *
LDAP_SLAPD_F (void) connection_write_resume LDAP_P((Connection *c));
LDAP_SLAPD_F (void) connection_op_finish LDAP_P((
- Operation *op ));
+ Operation *op, int lock ));
LDAP_SLAPD_F (unsigned long) connections_nextid(void);