DB *db = bdb->bi_id2entry->bdi_db;
DBT key, data;
struct berval bv;
- char buf[sizeof(ID)];
- ID tmp;
- int i, rc;
+ int rc;
#ifdef BDB_HIER
struct berval odn, ondn;
e->e_nname = slap_empty_bv;
#endif
DBTzero( &key );
- key.data = buf;
+ key.data = (char *) &e->e_id;
key.size = sizeof(ID);
- /* Set key in BigEndian order */
- tmp = e->e_id;
- for ( i=sizeof(ID)-1; i>=0; i-- ) {
- buf[i] = tmp & 0xff;
- tmp >>= 8;
- }
-
rc = entry_encode( e, &bv );
#ifdef BDB_HIER
e->e_name = odn; e->e_nname = ondn;
DB *db = bdb->bi_id2entry->bdi_db;
DBT key, data;
struct berval bv;
- char buf[sizeof(ID)];
- ID tmp;
- int i, rc = 0, ret = 0;
+ int rc = 0, ret = 0;
*e = NULL;
DBTzero( &key );
- key.data = buf;
+ key.data = (char *) &id;
key.size = sizeof(ID);
- tmp = id;
- for ( i=sizeof(ID)-1; i>=0; i-- ) {
- buf[i] = tmp & 0xff;
- tmp >>= 8;
- }
DBTzero( &data );
data.flags = DB_DBT_MALLOC;
struct bdb_info *bdb = (struct bdb_info *) be->be_private;
DB *db = bdb->bi_id2entry->bdi_db;
DBT key;
- char buf[sizeof(ID)];
- ID tmp;
- int i, rc;
+ int rc;
DBTzero( &key );
- key.data = buf;
+ key.data = (char *) &e->e_id;
key.size = sizeof(ID);
- tmp = e->e_id;
- for ( i=sizeof(ID)-1; i>=0; i-- ) {
- buf[i] = tmp & 0xff;
- tmp >>= 8;
- }
/* delete from database */
rc = db->del( db, tid, &key, 0 );
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;
+ boi->boi_bdb = op->o_bd;
+ op->o_private = boi;
+ }
+
+ } else {
+ *ent = entry_dup( e );
+ bdb_cache_return_entry_rw(bdb->bi_dbenv, &bdb->bi_cache, e, rw, &lock);
}
}