]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#6138 add lock flag to connection_op_finish()
authorHoward Chu <hyc@openldap.org>
Tue, 27 Jul 2021 17:03:07 +0000 (18:03 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 3 Aug 2021 15:19:49 +0000 (15:19 +0000)
servers/slapd/back-asyncmeta/message_queue.c
servers/slapd/connection.c
servers/slapd/proto-slap.h

index f059545401e1a56d32081ba76d1fc029d4438022..06eb9ed3eba94da81b7ad6ec01a9d3e5b1f7e11f 100644 (file)
@@ -141,7 +141,7 @@ void asyncmeta_free_op(Operation *op)
                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 );
 }
 
index a2d2c568dce6a3ba3fa2a8511f4837a8baa8bf16..02b2861ae037eb89dd547face07af34ca691da5b 100644 (file)
@@ -985,7 +985,7 @@ conn_counter_init( Operation *op, void *ctx )
 }
 
 void
-connection_op_finish( Operation *op )
+connection_op_finish( Operation *op, int lock )
 {
        Connection *conn = op->o_conn;
        void *memctx_null = NULL;
@@ -994,7 +994,8 @@ connection_op_finish( Operation *op )
 
        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;
@@ -1006,7 +1007,8 @@ connection_op_finish( Operation *op )
        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 *
index 5067c54f579be179ccf015fd8aa475a01a553f90..d2ff1adae9c010cff3801c87a0c077ec7c6a8a32 100644 (file)
@@ -812,7 +812,7 @@ LDAP_SLAPD_F (int) connection_write LDAP_P((ber_socket_t s));
 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);