summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2008-08-12 22:31:52 +0200
committerVolker Lendecke <vl@samba.org>2008-08-13 10:53:17 +0200
commit9b987e3923f7e8714acec6a2929435b1e6016645 (patch)
treed5c1ed0940e68f83ecec620a7c7fcfca595ec7f4
parente3ec81c519716fe50fd4d1b5941195baebe5be46 (diff)
downloadsamba-9b987e3923f7e8714acec6a2929435b1e6016645.tar.gz
samba-9b987e3923f7e8714acec6a2929435b1e6016645.tar.bz2
samba-9b987e3923f7e8714acec6a2929435b1e6016645.zip
Attempt to fix bug 5684
With the ctdb checkin dde9f3f006 tdb optimized out write lock checks for write-enabled transaction. Sadly, this also removed the possibility to ever remove dead records left over from tdb_delete calls within a transaction. Tridge, please check this! Did dde9f3f006 have any reason beyond performance optimizations? Thanks, Volker (This used to be commit 3f884c4ae36f3260e63626bdd4989d9258ae6497)
-rw-r--r--source3/lib/tdb/common/tdb.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/source3/lib/tdb/common/tdb.c b/source3/lib/tdb/common/tdb.c
index 767452c9b3..c7cec297f6 100644
--- a/source3/lib/tdb/common/tdb.c
+++ b/source3/lib/tdb/common/tdb.c
@@ -243,7 +243,7 @@ int tdb_do_delete(struct tdb_context *tdb, tdb_off_t rec_ptr, struct list_struct
if (tdb->read_only || tdb->traverse_read) return -1;
- if (tdb->traverse_write != 0 ||
+ if (((tdb->traverse_write != 0) && (!TDB_DEAD(rec))) ||
tdb_write_lock_record(tdb, rec_ptr) == -1) {
/* Someone traversing here: mark it as dead */
rec->magic = TDB_DEAD_MAGIC;