From: Howard Chu Date: Mon, 26 Jul 2004 00:40:08 +0000 (+0000) Subject: Import ITS#3245, ITS#3255 fixes from HEAD X-Git-Tag: OPENLDAP_REL_ENG_2_2_15~6 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=34f251863f4a3ba368efaf30f503a4882d23a297;p=openldap Import ITS#3245, ITS#3255 fixes from HEAD --- diff --git a/servers/slapd/back-bdb/id2entry.c b/servers/slapd/back-bdb/id2entry.c index d4eb267111..2635e1d424 100644 --- a/servers/slapd/back-bdb/id2entry.c +++ b/servers/slapd/back-bdb/id2entry.c @@ -265,7 +265,7 @@ int bdb_entry_get( #endif if( op ) boi = (struct bdb_op_info *) op->o_private; - if( boi != NULL && op->o_bd == boi->boi_bdb ) { + if( boi != NULL && op->o_bd->be_private == boi->boi_bdb->be_private ) { txn = boi->boi_txn; locker = boi->boi_locker; } @@ -376,15 +376,22 @@ return_results: if( rc != LDAP_SUCCESS ) { /* free entry */ bdb_cache_return_entry_rw(bdb->bi_dbenv, &bdb->bi_cache, e, rw, &lock); + } else { - *ent = e; - /* big drag. we need a place to store a read lock so we can - * release it later?? - */ - if ( op && !boi ) { - boi = op->o_tmpcalloc(1,sizeof(struct bdb_op_info),op->o_tmpmemctx); - boi->boi_lock = lock; - op->o_private = boi; + if ( slapMode == SLAP_SERVER_MODE ) { + *ent = e; + /* big drag. we need a place to store a read lock so we can + * release it later?? + */ + if ( op && !boi ) { + boi = op->o_tmpcalloc(1,sizeof(struct bdb_op_info),op->o_tmpmemctx); + boi->boi_lock = lock; + op->o_private = boi; + } + + } else { + *ent = entry_dup( e ); + bdb_cache_return_entry_rw(bdb->bi_dbenv, &bdb->bi_cache, e, rw, &lock); } } diff --git a/servers/slapd/back-bdb/idl.h b/servers/slapd/back-bdb/idl.h index 5b7b80c0fb..c0479465e4 100644 --- a/servers/slapd/back-bdb/idl.h +++ b/servers/slapd/back-bdb/idl.h @@ -1,4 +1,4 @@ -/* back-bdb.h - ldap bdb back-end header file */ +/* idl.h - ldap bdb back-end ID list header file */ /* $OpenLDAP$ */ /* This work is part of OpenLDAP Software . *