From: Pierangelo Masarati Date: Fri, 15 Jul 2005 01:04:52 +0000 (+0000) Subject: fix memory leak (ITS#3862) X-Git-Tag: OPENLDAP_REL_ENG_2_2_28~20 X-Git-Url: https://git.sur5r.net/?p=openldap;a=commitdiff_plain;h=0412eafeaad48f28c32a304d89843ef8275dcea7 fix memory leak (ITS#3862) --- diff --git a/CHANGES b/CHANGES index 6bc51b1185..2945ff5cb2 100644 --- 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) diff --git a/servers/slapd/back-meta/init.c b/servers/slapd/back-meta/init.c index cdb86735f9..b5043cc97b 100644 --- a/servers/slapd/back-meta/init.c +++ b/servers/slapd/back-meta/init.c @@ -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; } diff --git a/servers/slapd/back-meta/unbind.c b/servers/slapd/back-meta/unbind.c index 15268dc6f7..8f2839a0e0 100644 --- a/servers/slapd/back-meta/unbind.c +++ b/servers/slapd/back-meta/unbind.c @@ -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 ); }