diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2011-09-14 08:13:26 +0930 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2011-09-14 08:13:26 +0930 |
commit | 01b2214a1893db5071addf1fdf17e9ac06ed63a0 (patch) | |
tree | e3fe69fccee166bef42e4dbad2bc2f1655824fdb /lib/tdb2/test/lock-tracking.c | |
parent | ef70f5dd35974115a85850d04b0f4b64e511659f (diff) | |
download | samba-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.c | 13 |
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", |