From: Rusty Russell Date: Mon, 22 Feb 2010 02:51:24 +0000 (+1030) Subject: tdb: commit 9b987e3923f7e8714acec6a2929435b1e6016645 from SAMBA X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=ec4174af665a48a4ff08a7e053e78b1d376897f4;hp=d6b6780d0bc3dbdaaf679bbc308f74042f933cfd tdb: commit 9b987e3923f7e8714acec6a2929435b1e6016645 from SAMBA Author: Volker Lendecke Date: Tue Aug 12 22:31:52 2008 +0200 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) --- diff --git a/ccan/tdb/tdb.c b/ccan/tdb/tdb.c index bf767099..c6ce4548 100644 --- a/ccan/tdb/tdb.c +++ b/ccan/tdb/tdb.c @@ -286,7 +286,7 @@ int tdb_do_delete(struct tdb_context *tdb, tdb_off_t rec_ptr, struct tdb_record 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;