ITS#10042 Call monitor_cache_release exactly once

This commit is contained in:
Ondřej Kuzník 2023-04-20 11:04:08 +01:00 committed by Quanah Gibson-Mount
parent 525b631e37
commit efe0de0be6

View file

@ -97,7 +97,7 @@ monitor_send_children(
/* return entries */ /* return entries */
for ( ; e != NULL; e = e_tmp ) { 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_cache_lock( e );
monitor_entry_update( op, rs, e ); monitor_entry_update( op, rs, e );
@ -109,7 +109,6 @@ monitor_send_children(
e_tmp = mp->mp_next; e_tmp = mp->mp_next;
if ( op->o_abandon ) { if ( op->o_abandon ) {
monitor_cache_release( mi, e );
rc = SLAPD_ABANDON; rc = SLAPD_ABANDON;
goto freeout; goto freeout;
} }
@ -128,19 +127,21 @@ monitor_send_children(
monitor_cache_lock( e ); monitor_cache_lock( e );
monitor_cache_release( mi, e ); monitor_cache_release( mi, e );
} }
e = rs->sr_entry;
goto freeout; goto freeout;
} }
} }
if ( sub_nv == NULL ) { if ( sub_nv == NULL ) {
monitor_cache_release( mi, e ); monitor_cache_release( mi, locked );
locked = NULL;
} }
if ( sub ) { if ( sub ) {
rc = monitor_send_children( op, rs, sub_nv, sub_ch, sub ); rc = monitor_send_children( op, rs, sub_nv, sub_ch, sub );
if ( rc ) { if ( rc ) {
freeout: freeout:
monitor_cache_release( mi, e ); if ( locked ) {
monitor_cache_release( mi, locked );
}
if ( nonvolatile == 0 ) { if ( nonvolatile == 0 ) {
for ( ; e_tmp != NULL; ) { for ( ; e_tmp != NULL; ) {
mp = ( monitor_entry_t * )e_tmp->e_private; mp = ( monitor_entry_t * )e_tmp->e_private;
@ -158,8 +159,8 @@ freeout:
return( rc ); return( rc );
} }
} }
if ( sub_nv != NULL ) { if ( locked ) {
monitor_cache_release( mi, e ); monitor_cache_release( mi, locked );
} }
} }