From 57bb2cc6b714f68f98182a67e0f2fbe89cc3936f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Mon, 14 Apr 2025 17:51:06 +0100 Subject: [PATCH] ITS#10327 Allow lockless config_back_search() during server pause The assumption is that the only reason it is allowed to run at this point is that it is called from the reconfiguration context anyway. --- servers/slapd/bconfig.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c index 3d1d06d4b4..d7a4531316 100644 --- a/servers/slapd/bconfig.c +++ b/servers/slapd/bconfig.c @@ -6944,10 +6944,17 @@ config_back_search( Operation *op, SlapReply *rs ) CfBackInfo *cfb; CfEntryInfo *ce, *last = NULL; slap_mask_t mask; + int paused = 0; cfb = (CfBackInfo *)op->o_bd->be_private; - ldap_pvt_thread_rdwr_rlock( &cfb->cb_rwlock ); + if ( ldap_pvt_thread_pool_query( &connection_pool, + LDAP_PVT_THREAD_POOL_PARAM_PAUSED, &paused ) ) { + return -1; + } + if ( !paused ) { + ldap_pvt_thread_rdwr_rlock( &cfb->cb_rwlock ); + } ce = config_find_base( cfb->cb_root, &op->o_req_ndn, &last, op ); if ( !ce ) { if ( last ) @@ -6982,7 +6989,8 @@ config_back_search( Operation *op, SlapReply *rs ) } out: - ldap_pvt_thread_rdwr_runlock( &cfb->cb_rwlock ); + if ( !paused ) + ldap_pvt_thread_rdwr_runlock( &cfb->cb_rwlock ); send_ldap_result( op, rs ); return rs->sr_err; } -- 2.47.2