]> git.sur5r.net Git - openldap/commitdiff
fix memory leak (ITS#3862)
authorPierangelo Masarati <ando@openldap.org>
Fri, 15 Jul 2005 01:04:52 +0000 (01:04 +0000)
committerPierangelo Masarati <ando@openldap.org>
Fri, 15 Jul 2005 01:04:52 +0000 (01:04 +0000)
CHANGES
servers/slapd/back-meta/init.c
servers/slapd/back-meta/unbind.c

diff --git a/CHANGES b/CHANGES
index 6bc51b11857f162dc9d12442ba67b8996e27e5b9..2945ff5cb2447129dedf05848f4a7e646ee8b197 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,7 +5,7 @@ OpenLDAP 2.2.28 Engineering
        Fixed back-bdb/hdb - check for BDB TXN patch
        Fixed back-hdb nested modrdn bug (ITS#3857)
        Fixed back-ldap/meta undefined filter propagation (ITS#3785)
-       Fixed back-ldap memory leak (ITS#3862)
+       Fixed back-ldap/meta memory leak (ITS#3862)
        Fixed back-meta add w/o parent add (ITS#3804)
        Fixed back-meta control propagation bug (ITS#3813)
        Fixed syncrepl SASL bind crash (ITS#3792)
index cdb86735f978c3ec715e7a17c982861f6075d0f5..b5043cc97b2f15024500f19a081021570eca362f 100644 (file)
@@ -222,9 +222,19 @@ meta_back_db_destroy(
 
                ldap_pvt_thread_mutex_unlock( &li->conn_mutex );
                ldap_pvt_thread_mutex_destroy( &li->conn_mutex );
+
+               if ( li->rwinfo ) {
+#if 0
+                       /* FIXME: needs work */
+                       (void)rewrite_info_delete( li->rwinfo );
+#endif
+               }
+
+               free( li );
+
+               be->be_private = NULL;
        }
 
-       free( be->be_private );
        return 0;
 }
 
index 15268dc6f7cbd66d208db18125a2386dad84ca91..8f2839a0e0d876618cf5dcb96173b35224986406 100644 (file)
@@ -39,6 +39,8 @@ meta_back_conn_destroy(
 {
        struct metainfo *li = ( struct metainfo * )be->be_private;
        struct metaconn *lc, lc_curr;
+       int             i;
+               
 
 #ifdef NEW_LOGGING
        LDAP_LOG( BACK_META, ENTRY,
@@ -56,9 +58,14 @@ meta_back_conn_destroy(
                        meta_back_conn_cmp );
        ldap_pvt_thread_mutex_unlock( &li->conn_mutex );
 
+       /*
+        * Cleanup rewrite session
+        */
+       for ( i = 0; i < li->ntargets; ++i ) {
+               rewrite_session_delete( li->targets[ i ]->rwmap.rwm_rw, conn );
+       }
+
        if ( lc ) {
-               int i;
-               
 #ifdef NEW_LOGGING
                LDAP_LOG( BACK_META, INFO,
                        "meta_back_conn_destroy: destroying conn %ld\n",
@@ -77,7 +84,6 @@ meta_back_conn_destroy(
                                continue;
                        }
 
-                       rewrite_session_delete( li->targets[ i ]->rwmap.rwm_rw, conn );
                        meta_clear_one_candidate( &lc->conns[ i ], 1 );
                }