]> git.sur5r.net Git - openldap/commitdiff
More syncrepl fixes
authorKurt Zeilenga <kurt@openldap.org>
Fri, 24 Sep 2004 00:32:12 +0000 (00:32 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Fri, 24 Sep 2004 00:32:12 +0000 (00:32 +0000)
CHANGES
build/version.var
servers/slapd/back-bdb/delete.c
servers/slapd/back-bdb/modify.c
servers/slapd/back-bdb/modrdn.c
servers/slapd/back-ldbm/delete.c
servers/slapd/back-ldbm/modify.c
servers/slapd/back-ldbm/modrdn.c
servers/slapd/init.c

diff --git a/CHANGES b/CHANGES
index 5021c185aefced368385597d93c01063f1009620..a20b646d796f00529f9a18b762b0166ca42ff74e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,7 @@
 OpenLDAP 2.2 Change Log
 
+OpenLDAP 2.2.18 Engineering
+
 OpenLDAP 2.2.17 Release
        Fixed slapd syncrepl memory leak bugs
        Documentation
index e551659fa33f2336eca7b5beb1664dadf6c27031..662f77c249d7870ecefe02de920808dd38010d32 100644 (file)
@@ -15,7 +15,7 @@
 ol_package=OpenLDAP
 ol_major=2
 ol_minor=2
-ol_patch=17
+ol_patch=X
 ol_api_inc=20217
 ol_api_current=7
 ol_api_revision=10
index 18b0c0b1b9a95e743f5705731f4bc00bc23ab74a..c433e1dce71c5aced3b7baf70c8376a9a6f1dad8 100644 (file)
@@ -158,6 +158,8 @@ retry:      /* transaction retry */
 
        /* FIXME : dn2entry() should return non-glue entry */
        if ( e == NULL || ( !manageDSAit && is_entry_glue( e ))) {
+               BerVarray deref = NULL;
+
 #ifdef NEW_LOGGING
                LDAP_LOG ( OPERATION, ARGS, 
                        "<=- bdb_delete: no such object %s\n", op->o_req_dn.bv_val, 0, 0);
@@ -176,7 +178,6 @@ retry:      /* transaction retry */
                        matched = NULL;
 
                } else {
-                       BerVarray deref = NULL;
                        if ( !LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) {
                                syncinfo_t *si;
                                LDAP_STAILQ_FOREACH( si, &op->o_bd->be_syncinfo, si_next ) {
@@ -188,7 +189,7 @@ retry:      /* transaction retry */
                                deref = default_referral;
                        }
                        rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn,
-                               LDAP_SCOPE_DEFAULT );
+                                       LDAP_SCOPE_DEFAULT );
                }
 
                rs->sr_err = LDAP_REFERRAL;
@@ -197,6 +198,9 @@ retry:      /* transaction retry */
                if ( rs->sr_ref != default_referral ) {
                        ber_bvarray_free( rs->sr_ref );
                }
+               if ( deref != default_referral ) {
+                       ber_bvarray_free( deref );
+               }
                free( (char *)rs->sr_matched );
                rs->sr_ref = NULL;
                rs->sr_matched = NULL;
index 45d2efeb11eb9516fd8a87b3a5f4db93d7d5949f..d45f1ba09cb821c8de7755319bd30db16d4149a0 100644 (file)
@@ -482,6 +482,7 @@ retry:      /* transaction retry */
        if (( rs->sr_err == DB_NOTFOUND ) ||
                ( !manageDSAit && e && is_entry_glue( e )))
        {
+               BerVarray deref = NULL;
                if ( e != NULL ) {
                        rs->sr_matched = ch_strdup( e->e_dn );
                        rs->sr_ref = is_entry_referral( e )
@@ -491,7 +492,6 @@ retry:      /* transaction retry */
                        e = NULL;
 
                } else {
-                       BerVarray deref = NULL;
                        if ( !LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) {
                                syncinfo_t *si;
                                LDAP_STAILQ_FOREACH( si, &op->o_bd->be_syncinfo, si_next ) {
@@ -503,7 +503,7 @@ retry:      /* transaction retry */
                                deref = default_referral;
                        }
                        rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn,
-                               LDAP_SCOPE_DEFAULT );
+                                       LDAP_SCOPE_DEFAULT );
                }
 
                rs->sr_err = LDAP_REFERRAL;
@@ -512,6 +512,9 @@ retry:      /* transaction retry */
                if ( rs->sr_ref != default_referral ) {
                        ber_bvarray_free( rs->sr_ref );
                }
+               if ( deref != default_referral ) {
+                       ber_bvarray_free( deref );
+               }
                free( (char *)rs->sr_matched );
                rs->sr_ref = NULL;
                rs->sr_matched = NULL;
index 0956d8cdfd01a903432ed0f85b3c0a6b09d39f88..fd88485bd08bb54df9893b030a10ceacf481d207 100644 (file)
@@ -186,6 +186,7 @@ retry:      /* transaction retry */
        if (( rs->sr_err == DB_NOTFOUND ) ||
                ( !manageDSAit && e && is_entry_glue( e )))
        {
+               BerVarray deref = NULL;
                if( e != NULL ) {
                        rs->sr_matched = ch_strdup( e->e_dn );
                        rs->sr_ref = is_entry_referral( e )
@@ -195,7 +196,6 @@ retry:      /* transaction retry */
                        e = NULL;
 
                } else {
-                       BerVarray deref = NULL;
                        if ( !LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) {
                                syncinfo_t *si;
                                LDAP_STAILQ_FOREACH( si, &op->o_bd->be_syncinfo, si_next ) {
@@ -207,13 +207,16 @@ retry:    /* transaction retry */
                                deref = default_referral;
                        }
                        rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn,
-                               LDAP_SCOPE_DEFAULT );
+                                       LDAP_SCOPE_DEFAULT );
                }
 
                rs->sr_err = LDAP_REFERRAL;
                send_ldap_result( op, rs );
 
                ber_bvarray_free( rs->sr_ref );
+               if ( deref != default_referral ) {
+                       ber_bvarray_free( deref );
+               }
                free( (char *)rs->sr_matched );
                rs->sr_ref = NULL;
                rs->sr_matched = NULL;
index 234b30a3ab4ed7238b80f02957dfa13dab5c03de..17d9e0e7ae602eb4df19d7bfc247df71e4a3b083 100644 (file)
@@ -53,6 +53,8 @@ ldbm_back_delete(
 
        /* FIXME : dn2entry() should return non-glue entry */
        if ( e == NULL || ( !manageDSAit && is_entry_glue( e ))) {
+               BerVarray deref = NULL;
+
 #ifdef NEW_LOGGING
                LDAP_LOG( BACK_LDBM, INFO, 
                        "ldbm_back_delete: no such object %s\n", op->o_req_dn.bv_val, 0, 0 );
@@ -69,7 +71,6 @@ ldbm_back_delete(
                        cache_return_entry_r( &li->li_cache, matched );
 
                } else {
-                       BerVarray deref = NULL;
                        if ( !LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) {
                                syncinfo_t *si;
                                LDAP_STAILQ_FOREACH( si, &op->o_bd->be_syncinfo, si_next ) {
@@ -81,7 +82,7 @@ ldbm_back_delete(
                                deref = default_referral;
                        }
                        rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn,
-                                                               LDAP_SCOPE_DEFAULT );
+                                                       LDAP_SCOPE_DEFAULT );
                }
 
                ldap_pvt_thread_rdwr_wunlock(&li->li_giant_rwlock);
@@ -90,6 +91,9 @@ ldbm_back_delete(
                send_ldap_result( op, rs );
 
                if ( rs->sr_ref ) ber_bvarray_free( rs->sr_ref );
+               if ( deref != default_referral ) {
+                       ber_bvarray_free( deref );
+               }
                free( (char *)rs->sr_matched );
                rs->sr_ref = NULL;
                rs->sr_matched = NULL;
index 3382356e5a7de10b596340eb320640c2f72ca263..40c8d9bbaf08f9ac7ac09b400add1e0374e57792 100644 (file)
@@ -339,6 +339,7 @@ ldbm_back_modify(
 
        /* FIXME: dn2entry() should return non-glue entry */
        if (( e == NULL ) || ( !manageDSAit && e && is_entry_glue( e ))) {
+               BerVarray deref = NULL;
                if ( matched != NULL ) {
                        rs->sr_matched = ch_strdup( matched->e_dn );
                        rs->sr_ref = is_entry_referral( matched )
@@ -346,7 +347,6 @@ ldbm_back_modify(
                                : NULL;
                        cache_return_entry_r( &li->li_cache, matched );
                } else {
-                       BerVarray deref = NULL;
                        if ( !LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) {
                                syncinfo_t *si;
                                LDAP_STAILQ_FOREACH( si, &op->o_bd->be_syncinfo, si_next ) {
@@ -358,7 +358,7 @@ ldbm_back_modify(
                                deref = default_referral;
                        }
                        rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn,
-                                                       LDAP_SCOPE_DEFAULT );
+                                               LDAP_SCOPE_DEFAULT );
                }
 
                ldap_pvt_thread_rdwr_wunlock(&li->li_giant_rwlock);
@@ -366,6 +366,9 @@ ldbm_back_modify(
                send_ldap_result( op, rs );
 
                if ( rs->sr_ref ) ber_bvarray_free( rs->sr_ref );
+               if ( deref != default_referral ) {
+                       ber_bvarray_free( deref );
+               }
                free( (char *)rs->sr_matched );
 
                rs->sr_ref = NULL;
index ccc7bf92333e6122e44b8043906fb09bcd4c9419..7b5fa0c06c416196b205c35c708e20cd3ae38796 100644 (file)
@@ -84,6 +84,7 @@ ldbm_back_modrdn(
        /* get entry with writer lock */
        /* FIXME: dn2entry() should return non-glue entry */
        if (( e == NULL  ) || ( !manageDSAit && e && is_entry_glue( e ))) {
+               BerVarray deref = NULL;
                if ( matched != NULL ) {
                        rs->sr_matched = strdup( matched->e_dn );
                        rs->sr_ref = is_entry_referral( matched )
@@ -91,7 +92,6 @@ ldbm_back_modrdn(
                                : NULL;
                        cache_return_entry_r( &li->li_cache, matched );
                } else {
-                       BerVarray deref = NULL;
                        if ( !LDAP_STAILQ_EMPTY( &op->o_bd->be_syncinfo )) {
                                syncinfo_t *si;
                                LDAP_STAILQ_FOREACH( si, &op->o_bd->be_syncinfo, si_next ) {
@@ -103,7 +103,7 @@ ldbm_back_modrdn(
                                deref = default_referral;
                        }
                        rs->sr_ref = referral_rewrite( deref, NULL, &op->o_req_dn,
-                                                       LDAP_SCOPE_DEFAULT );
+                                               LDAP_SCOPE_DEFAULT );
                }
 
                ldap_pvt_thread_rdwr_wunlock(&li->li_giant_rwlock);
@@ -112,6 +112,9 @@ ldbm_back_modrdn(
                send_ldap_result( op, rs );
 
                if ( rs->sr_ref ) ber_bvarray_free( rs->sr_ref );
+               if ( deref != default_referral ) {
+                       ber_bvarray_free( deref );
+               }
                free( (char *)rs->sr_matched );
                rs->sr_ref = NULL;
                rs->sr_matched = NULL;
index a8a8e812ea6395eb670ac0fa24128dd1544d197a..1fee4fab2299f3cd3a2c3d32a4d5c6c75a121fc3 100644 (file)
@@ -257,6 +257,9 @@ int slap_destroy(void)
                slap_name, 0, 0 );
 #endif
 
+       if ( default_referral ) {
+               ber_bvarray_free( default_referral );
+       }
 
        rc = backend_destroy();