]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9584 avoid busy-loop while refresh is serialized
authorHoward Chu <hyc@openldap.org>
Thu, 29 Jul 2021 12:28:05 +0000 (13:28 +0100)
committerHoward Chu <hyc@openldap.org>
Thu, 29 Jul 2021 12:28:34 +0000 (13:28 +0100)
servers/slapd/syncrepl.c
tests/scripts/test050-syncrepl-multiprovider

index 97ceb38264821f5f6d7caa7d7cf3dd2e8f6db7ab..2a6efe5e9addad2456d90adf78b774e7710322ec 100644 (file)
@@ -923,6 +923,7 @@ check_syncprov(
 #define SYNC_ERROR             -101
 #define SYNC_REPOLL            -102
 #define SYNC_PAUSED            -103
+#define SYNC_BUSY              -104
 
 static int
 do_syncrep1(
@@ -937,12 +938,8 @@ do_syncrep1(
        void    *ssl;
 #endif
 
-       while ( ldap_pvt_thread_mutex_trylock( &si->si_cookieState->cs_refresh_mutex )) {
-               if ( slapd_shutdown )
-                       return SYNC_SHUTDOWN;
-               if ( !ldap_pvt_thread_pool_pausecheck( &connection_pool ))
-                       ldap_pvt_thread_yield();
-       }
+       if ( ldap_pvt_thread_mutex_trylock( &si->si_cookieState->cs_refresh_mutex ))
+               return SYNC_BUSY;
 
        si->si_lastconnect = slap_get_time();
        si->si_refreshDone = 0;
index e8c6982bcf6dc0d6ed26415a5993a2e6d057423b..fffa9f20b19e1be50418b69f1a71dd351ab3445d 100755 (executable)
@@ -165,7 +165,7 @@ PORT=`expr $BASEPORT + $n`
 URI="ldap://${LOCALHOST}:$PORT/"
 echo "olcSyncRepl: rid=00$n provider=$URI binddn=\"cn=config\" bindmethod=simple" >> $TMP
 echo "  credentials=$CONFIGPW searchbase=\"cn=config\" type=refreshAndPersist" >> $TMP
-echo "  retry=\"3 10 300 5\" timeout=3" >> $TMP
+echo "  retry=\"1 12 300 5\" timeout=3" >> $TMP
 n=`expr $n + 1`
 done
 echo "-" >> $TMP
@@ -227,7 +227,7 @@ P2=`expr $BASEPORT + $j`
 U2="ldap://${LOCALHOST}:$P2/"
 echo "olcSyncRepl: rid=00$j provider=$U2 binddn=\"cn=config\" bindmethod=simple" >> $TMP
 echo "  credentials=$CONFIGPW searchbase=\"cn=config\" type=refreshAndPersist" >> $TMP
-echo "  retry=\"3 10 300 5\" timeout=3" >> $TMP
+echo "  retry=\"1 12 300 5\" timeout=3" >> $TMP
 j=`expr $j + 1`
 done
 cat <<EOF >> $TMP
@@ -291,7 +291,7 @@ URI="ldap://${LOCALHOST}:$PORT/"
 
 echo "olcSyncRepl: rid=01$n provider=$URI binddn=\"$MANAGERDN\" bindmethod=simple" >> $TMP
 echo "  credentials=$PASSWD searchbase=\"$BASEDN\" $SYNCTYPE" >> $TMP
-echo "  retry=\"3 10 300 5\" timeout=3" >> $TMP
+echo "  retry=\"1 12 300 5\" timeout=3" >> $TMP
 n=`expr $n + 1`
 done