From: Howard Chu Date: Wed, 27 Oct 2004 14:52:18 +0000 (+0000) Subject: ITS#3365 - fix leaking bdb locks when evaluating dynamic groups X-Git-Tag: OPENLDAP_REL_ENG_2_3_0ALPHA~399 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=0c9c90a3e96d41f3079feecaceade7cda0b867a8;p=openldap ITS#3365 - fix leaking bdb locks when evaluating dynamic groups --- diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c index 4c1d58a1be..834b99dae1 100644 --- a/servers/slapd/backend.c +++ b/servers/slapd/backend.c @@ -1329,10 +1329,15 @@ backend_group( Filter *filter; Entry *user; Backend *b2 = op->o_bd; + void *o_private = op->o_private; if ( target && dn_match( &target->e_nname, op_ndn ) ) { user = target; } else { + /* back-bdb stored lockinfo here, we saved it + * above. Clear it out so that a new lock can be used. + */ + op->o_private = NULL; op->o_bd = select_backend( op_ndn, 0, 0 ); rc = be_entry_get_rw(op, op_ndn, NULL, NULL, 0, &user ); } @@ -1397,6 +1402,8 @@ loopit: } if ( user != target ) { be_entry_release_r( op, user ); + /* restore previous lockinfo, if any */ + op->o_private = o_private; } } op->o_bd = b2;