]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10234 Reinit retry state on refreshDone
authorOndřej Kuzník <ondra@mistotebe.net>
Fri, 19 Jul 2024 08:59:56 +0000 (09:59 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 1 Oct 2024 16:12:50 +0000 (16:12 +0000)
servers/slapd/syncrepl.c

index c708ebec88a2bd07c35e8c33c19943dae8b5d392..773000fbf17f4adfb2d20ae9f0ff4dedf57b1e3f 100644 (file)
@@ -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 );