]> git.sur5r.net Git - openldap/commitdiff
ITS#5231 don't maintain presentlist for entries added in Persist phase
authorHoward Chu <hyc@openldap.org>
Mon, 12 Nov 2007 14:38:34 +0000 (14:38 +0000)
committerHoward Chu <hyc@openldap.org>
Mon, 12 Nov 2007 14:38:34 +0000 (14:38 +0000)
servers/slapd/syncrepl.c

index 4f0d7cfca35a2f13ed85e86284d52607ee989462..085e59f12d6d891ffa534f75a2891b2ff4ce3006 100644 (file)
@@ -93,6 +93,7 @@ typedef struct syncinfo_s {
        int                     si_tlimit;
        int                     si_refreshDelete;
        int                     si_refreshPresent;
+       int                     si_refreshDone;
        int                     si_syncdata;
        int                     si_logstate;
        int                     si_conn_setup;
@@ -628,6 +629,8 @@ do_syncrep1(
                ldap_pvt_thread_mutex_unlock( &si->si_cookieState->cs_mutex );
        }
 
+       si->si_refreshDone = 0;
+
        rc = ldap_sync_search( si, op->o_tmpmemctx );
 
        if( rc != LDAP_SUCCESS ) {
@@ -716,7 +719,6 @@ do_syncrep2(
        struct timeval tout = { 0, 0 };
 
        int             refreshDeletes = 0;
-       int             refreshDone = 1;
        BerVarray syncUUIDs = NULL;
        ber_tag_t si_tag;
 
@@ -973,10 +975,14 @@ do_syncrep2(
                                                                slap_parse_sync_cookie( &syncCookie, NULL );
                                                        }
                                                }
+                                               /* Defaults to TRUE */
                                                if ( ber_peek_tag( ber, &len ) ==
                                                        LDAP_TAG_REFRESHDONE )
                                                {
-                                                       ber_scanf( ber, "b", &refreshDone );
+                                                       ber_scanf( ber, "b", &si->si_refreshDone );
+                                               } else
+                                               {
+                                                       si->si_refreshDone = 1;
                                                }
                                                ber_scanf( ber, /*"{"*/ "}" );
                                                break;
@@ -1888,7 +1894,7 @@ syncrepl_entry(
                si->si_ridtxt, syncrepl_state2str( syncstate ), 0 );
 
        if (( syncstate == LDAP_SYNC_PRESENT || syncstate == LDAP_SYNC_ADD ) ) {
-               if ( !si->si_refreshPresent ) {
+               if ( !si->si_refreshPresent && !si->si_refreshDone ) {
                        syncuuid_inserted = avl_presentlist_insert( si, syncUUID );
                }
        }