]> git.sur5r.net Git - openldap/commitdiff
release syncinfo mem upon syncrepl failure as well as shutdown
authorJong Hyuk Choi <jongchoi@openldap.org>
Sat, 11 Sep 2004 22:37:21 +0000 (22:37 +0000)
committerJong Hyuk Choi <jongchoi@openldap.org>
Sat, 11 Sep 2004 22:37:21 +0000 (22:37 +0000)
servers/slapd/syncrepl.c

index cb39b532c813baf648c8296793da0d7dcbc082d8..aa824ca24b6425feaea6732143644a043556c4cd 100644 (file)
@@ -774,6 +774,7 @@ do_syncrepl(
        int dostop = 0;
        ber_socket_t s;
        int i, defer = 1;
+       Backend *be;
 
        Debug( LDAP_DEBUG_TRACE, "=>do_syncrepl\n", 0, 0, 0 );
 
@@ -805,7 +806,7 @@ do_syncrepl(
        op.o_dn = si->si_updatedn;
        op.o_ndn = si->si_updatedn;
        op.o_managedsait = 1;
-       op.o_bd = si->si_be;
+       op.o_bd = be = si->si_be;
 
        op.o_sync_state.ctxcsn = NULL;
        op.o_sync_state.sid = -1;
@@ -880,6 +881,8 @@ do_syncrepl(
 
                if ( !si->si_retrynum || si->si_retrynum[i] == -2 ) {
                        ldap_pvt_runqueue_remove( &syncrepl_rq, rtask );
+                       LDAP_STAILQ_REMOVE( &be->be_syncinfo, si, syncinfo_s, si_next );
+                       syncinfo_free( si );
                } else if ( si->si_retrynum[i] >= -1 ) {
                        if ( si->si_retrynum[i] > 0 )
                                si->si_retrynum[i]--;
@@ -1277,6 +1280,7 @@ done :
        }
        if ( si->si_syncUUID_ndn.bv_val ) {
                ch_free( si->si_syncUUID_ndn.bv_val );
+               si->si_syncUUID_ndn.bv_val = NULL;
        }
        return ret;
 }