From: Howard Chu Date: Tue, 27 Jul 2021 17:03:07 +0000 (+0100) Subject: ITS#6138 add lock flag to connection_op_finish() X-Git-Tag: OPENLDAP_REL_ENG_2_6_0~137 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a61175debdc5309bdb676a35a4be816d0b2aa85;p=thirdparty%2Fopenldap.git ITS#6138 add lock flag to connection_op_finish() --- diff --git a/servers/slapd/back-asyncmeta/message_queue.c b/servers/slapd/back-asyncmeta/message_queue.c index f059545401..06eb9ed3eb 100644 --- a/servers/slapd/back-asyncmeta/message_queue.c +++ b/servers/slapd/back-asyncmeta/message_queue.c @@ -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 ); } diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index a2d2c568dc..02b2861ae0 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -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 * diff --git a/servers/slapd/proto-slap.h b/servers/slapd/proto-slap.h index 5067c54f57..d2ff1adae9 100644 --- a/servers/slapd/proto-slap.h +++ b/servers/slapd/proto-slap.h @@ -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);