]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#10232 Reset cs_refreshing on config delete
authorOndřej Kuzník <ondra@mistotebe.net>
Fri, 19 Jul 2024 08:53:35 +0000 (09:53 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Tue, 1 Oct 2024 16:12:50 +0000 (16:12 +0000)
servers/slapd/syncrepl.c

index 4a5d0c70e1f6eb4039444452c0f12c348c3bf793..c708ebec88a2bd07c35e8c33c19943dae8b5d392 100644 (file)
@@ -527,7 +527,7 @@ start_refresh(syncinfo_t *si)
 }
 
 static int
-refresh_finished(syncinfo_t *si)
+refresh_finished(syncinfo_t *si, int reschedule)
 {
        syncinfo_t *sie;
        int removed = 0;
@@ -538,7 +538,7 @@ refresh_finished(syncinfo_t *si)
                removed = 1;
        }
 
-       if ( removed ) {
+       if ( removed && reschedule ) {
                for ( sie = si->si_be->be_syncinfo; sie; sie = sie->si_next ) {
                        if ( sie->si_paused ) {
                                struct re_s* rtask = sie->si_re;
@@ -1186,7 +1186,7 @@ do_syncrep1(
        if ( rc == SYNC_BUSY ) {
                return rc;
        } else if ( rc != LDAP_SUCCESS ) {
-               refresh_finished( si );
+               refresh_finished( si, 1 );
                Debug( LDAP_DEBUG_ANY, "do_syncrep1: %s "
                        "ldap_search_ext: %s (%d)\n",
                        si->si_ridtxt, ldap_err2string( rc ), rc );
@@ -1873,7 +1873,7 @@ logerr:
                                        }
                                        ber_scanf( ber, /*"{"*/ "}" );
                                        if ( refreshing && si->si_refreshDone ) {
-                                               refresh_finished( si );
+                                               refresh_finished( si, 1 );
                                                refreshing = 0;
                                        }
                                        break;
@@ -2022,7 +2022,7 @@ done:
                        si->si_ridtxt, err, ldap_err2string( err ) );
        }
        if ( refreshing && ( rc || si->si_refreshDone ) ) {
-               refresh_finished( si );
+               refresh_finished( si, 1 );
        }
 
        slap_sync_cookie_free( &syncCookie, 0 );
@@ -6333,7 +6333,7 @@ syncinfo_free( syncinfo_t *sie, int free_all )
                }
                if ( sie->si_cookieState ) {
                        /* Could be called from do_syncrepl (server unpaused) */
-                       if ( !free_all ) refresh_finished( sie );
+                       refresh_finished( sie, !free_all );
 
                        sie->si_cookieState->cs_ref--;
                        if ( !sie->si_cookieState->cs_ref ) {