summaryrefslogtreecommitdiff
path: root/lib/tdb2/test/lock-tracking.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2011-09-14 08:13:26 +0930
committerRusty Russell <rusty@rustcorp.com.au>2011-09-14 08:13:26 +0930
commit01b2214a1893db5071addf1fdf17e9ac06ed63a0 (patch)
treee3fe69fccee166bef42e4dbad2bc2f1655824fdb /lib/tdb2/test/lock-tracking.c
parentef70f5dd35974115a85850d04b0f4b64e511659f (diff)
downloadsamba-01b2214a1893db5071addf1fdf17e9ac06ed63a0.tar.gz
samba-01b2214a1893db5071addf1fdf17e9ac06ed63a0.tar.bz2
samba-01b2214a1893db5071addf1fdf17e9ac06ed63a0.zip
tdb2: test: try (almost) all tests with TDB_VERSION1 flag.
There are some minor changes required, in particular: 1) Make sure lockcheck understands tdb1 allrecord lock upgrades. 2) Handle tdb1 sequence number jumps: various operations increment the sequence number twice, especually tdb_append. 3) Don't test fail on unlock, since it gets triggered with traversal on the tdb1 backend (we didn't actually ever test this case for tdb2). 4) Move clear_if_first to offset 4, to match tdb1. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit 818ed29730b030ce79855fc35c212b51adff3180)
Diffstat (limited to 'lib/tdb2/test/lock-tracking.c')
-rw-r--r--lib/tdb2/test/lock-tracking.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/tdb2/test/lock-tracking.c b/lib/tdb2/test/lock-tracking.c
index ba09399219..e253db9f71 100644
--- a/lib/tdb2/test/lock-tracking.c
+++ b/lib/tdb2/test/lock-tracking.c
@@ -1,5 +1,5 @@
/* We save the locks so we can reaquire them. */
-#include <ccan/tdb2/private.h>
+#include <ccan/tdb2/tdb1_private.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdarg.h>
@@ -110,6 +110,17 @@ int fcntl_with_lockcheck(int fd, int cmd, ... /* arg */ )
i->type = F_WRLCK;
goto done;
}
+ /* allrecord upgrade for tdb1. */
+ if (i->type == F_RDLCK && fl->l_type == F_WRLCK
+ && i->off == TDB1_FREELIST_TOP
+ && fl->l_start == TDB1_FREELIST_TOP
+ && i->len == 0
+ && fl->l_len == 0) {
+ if (ret == 0)
+ i->type = F_WRLCK;
+ goto done;
+ }
+
if (!suppress_lockcheck) {
diag("%s lock %u@%u overlaps %u@%u",
fl->l_type == F_WRLCK ? "write" : "read",