]> 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>
Fri, 4 Oct 2024 22:07:28 +0000 (22:07 +0000)
servers/slapd/syncrepl.c

index 93957667fa85fca4ae3af582d0c7e115baa308bd..102504847e84473674bb20021a5b006c4415c0d6 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 );
@@ -1852,7 +1852,7 @@ logerr:
                                        }
                                        ber_scanf( ber, /*"{"*/ "}" );
                                        if ( refreshing && si->si_refreshDone ) {
-                                               refresh_finished( si );
+                                               refresh_finished( si, 1 );
                                                refreshing = 0;
                                        }
                                        break;
@@ -2001,7 +2001,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 );
@@ -6105,7 +6105,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 ) {