From: Ondřej Kuzník Date: Thu, 20 Apr 2023 10:04:08 +0000 (+0100) Subject: ITS#10042 Call monitor_cache_release exactly once X-Git-Tag: OPENLDAP_REL_ENG_2_6_5~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ace8531ba4e4767c3290677cf3de712f3b7362b1;p=thirdparty%2Fopenldap.git ITS#10042 Call monitor_cache_release exactly once --- diff --git a/servers/slapd/back-monitor/search.c b/servers/slapd/back-monitor/search.c index d33cee525d..f58ff116be 100644 --- a/servers/slapd/back-monitor/search.c +++ b/servers/slapd/back-monitor/search.c @@ -97,7 +97,7 @@ monitor_send_children( /* return entries */ for ( ; e != NULL; e = e_tmp ) { - Entry *sub_nv = NULL, *sub_ch = NULL; + Entry *sub_nv = NULL, *sub_ch = NULL, *locked = e; monitor_cache_lock( e ); monitor_entry_update( op, rs, e ); @@ -109,7 +109,6 @@ monitor_send_children( e_tmp = mp->mp_next; if ( op->o_abandon ) { - monitor_cache_release( mi, e ); rc = SLAPD_ABANDON; goto freeout; } @@ -128,19 +127,21 @@ monitor_send_children( monitor_cache_lock( e ); monitor_cache_release( mi, e ); } - e = rs->sr_entry; goto freeout; } } if ( sub_nv == NULL ) { - monitor_cache_release( mi, e ); + monitor_cache_release( mi, locked ); + locked = NULL; } if ( sub ) { rc = monitor_send_children( op, rs, sub_nv, sub_ch, sub ); if ( rc ) { freeout: - monitor_cache_release( mi, e ); + if ( locked ) { + monitor_cache_release( mi, locked ); + } if ( nonvolatile == 0 ) { for ( ; e_tmp != NULL; ) { mp = ( monitor_entry_t * )e_tmp->e_private; @@ -158,8 +159,8 @@ freeout: return( rc ); } } - if ( sub_nv != NULL ) { - monitor_cache_release( mi, e ); + if ( locked ) { + monitor_cache_release( mi, locked ); } }