/* id2entry.c - routines to deal with the id2entry database */
/* $OpenLDAP$ */
-/*
- * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
- * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
+ *
+ * Copyright 2000-2004 The OpenLDAP Foundation.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted only as authorized by the OpenLDAP
+ * Public License.
+ *
+ * A copy of this license is available in the file LICENSE in the
+ * top-level directory of the distribution or, alternatively, at
+ * <http://www.OpenLDAP.org/license.html>.
*/
#include "portable.h"
SLAP_TRUNCATE_MODE, SLAP_UNDEFINED_MODE */
if ( slapMode == SLAP_SERVER_MODE ) {
+ /* If not in our cache, just free it */
+ if ( !e->e_private ) {
+ return bdb_entry_return( e );
+ }
/* free entry and reader or writer lock */
if ( o ) {
boi = (struct bdb_op_info *)o->o_private;
#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;
}
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);
}
}