}
/* fetch it */
- rc = db->get( db, tid, &key, &data, bdb->bi_db_opflags );
+ rc = db->get( db, tid, &key, &data, bdb->bi_db_opflags | ( rw ? DB_RMW : 0 ));
if( rc != 0 ) {
return rc;
}
if ( rc == 0 ) {
+#ifdef BDB_HIER
+ bdb_fix_dn(be, id, *e);
+#endif
ret = bdb_cache_add_entry_rw( bdb->bi_dbenv,
&bdb->bi_cache, *e, rw, locker, lock);
while ( ret == 1 || ret == -1 ) {
rc = ret;
}
-#ifdef BDB_HIER
- bdb_fix_dn(be, id, *e);
-#endif
-
if (rc == 0) {
bdb_cache_entry_commit(*e);
}