From c7a2f95493db1b744a026469d41b8741d8a6d2d3 Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Fri, 5 Nov 2004 15:29:59 +0000 Subject: [PATCH] Plugged memory leak --- servers/slapd/back-bdb/ctxcsn.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/servers/slapd/back-bdb/ctxcsn.c b/servers/slapd/back-bdb/ctxcsn.c index b41f474319..e5bccf02ed 100644 --- a/servers/slapd/back-bdb/ctxcsn.c +++ b/servers/slapd/back-bdb/ctxcsn.c @@ -109,6 +109,7 @@ bdb_csn_commit( if ( ret != LDAP_SUCCESS ) { Debug( LDAP_DEBUG_TRACE, "bdb_csn_commit: modify failed (%d)\n", rs->sr_err, 0, 0 ); + if ( dummy.e_attrs != e->e_attrs ) attrs_free( dummy.e_attrs ); switch( ret ) { case DB_LOCK_DEADLOCK: case DB_LOCK_NOTGRANTED: @@ -124,13 +125,23 @@ bdb_csn_commit( break; case DB_LOCK_DEADLOCK : case DB_LOCK_NOTGRANTED : + if ( dummy.e_attrs != e->e_attrs ) attrs_free( dummy.e_attrs ); goto rewind; default : + if ( dummy.e_attrs != e->e_attrs ) attrs_free( dummy.e_attrs ); rs->sr_err = ret; rs->sr_text = "context csn update failed"; return BDB_CSN_ABORT; } - bdb_cache_modify( *ctxcsn_e, dummy.e_attrs, bdb->bi_dbenv, locker, &ctxcsn_lock ); + ret = bdb_cache_modify( *ctxcsn_e, dummy.e_attrs, bdb->bi_dbenv, locker, &ctxcsn_lock ); + if ( ret != LDAP_SUCCESS ) { + if ( dummy.e_attrs != e->e_attrs ) attrs_free( dummy.e_attrs ); + switch( ret ) { + case DB_LOCK_DEADLOCK: + case DB_LOCK_NOTGRANTED: + goto rewind; + } + } } break; case DB_NOTFOUND: -- 2.39.5