From: Ondřej Kuzník Date: Fri, 19 Jul 2024 08:59:56 +0000 (+0100) Subject: ITS#10234 Reinit retry state on refreshDone X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2af486cf00adaba3eb38c91e66f4bf64af1d89c8;p=thirdparty%2Fopenldap.git ITS#10234 Reinit retry state on refreshDone --- diff --git a/servers/slapd/syncrepl.c b/servers/slapd/syncrepl.c index c708ebec88..773000fbf1 100644 --- a/servers/slapd/syncrepl.c +++ b/servers/slapd/syncrepl.c @@ -532,6 +532,15 @@ refresh_finished(syncinfo_t *si, int reschedule) syncinfo_t *sie; int removed = 0; + if ( si->si_ctype > 0 && si->si_refreshDone && si->si_retrynum ) { + /* ITS#10234: We've made meaningful progress, reinit retry state */ + int i; + for ( i = 0; si->si_retrynum_init[i] != RETRYNUM_TAIL; i++ ) { + si->si_retrynum[i] = si->si_retrynum_init[i]; + } + si->si_retrynum[i] = RETRYNUM_TAIL; + } + ldap_pvt_thread_mutex_lock( &si->si_cookieState->cs_refresh_mutex ); if ( si->si_cookieState->cs_refreshing == si ) { si->si_cookieState->cs_refreshing = NULL; @@ -6211,6 +6220,7 @@ syncinfo_free( syncinfo_t *sie, int free_all ) do { si_next = sie->si_next; + sie->si_ctype = 0; if ( !BER_BVISEMPTY( &sie->si_monitor_ndn )) { syncrepl_monitor_del( sie );