From: Ralf Haferkamp Date: Fri, 5 Nov 2004 15:29:59 +0000 (+0000) Subject: Plugged memory leak X-Git-Tag: OPENLDAP_REL_ENG_2_3_0ALPHA~363 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=c7a2f95493db1b744a026469d41b8741d8a6d2d3;p=openldap Plugged memory leak --- 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: