summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2013-02-14 16:10:31 +0100
committerStefan Metzmacher <metze@samba.org>2013-02-19 15:46:45 +0100
commit68559b787e7c9a83e055493bde638ec02e1097d1 (patch)
tree6e5824754bc7ba60258a0fa25618b0728e45adfd
parent31e4d6d2c7779e2f688352f5947e6bbd2a1cfc60 (diff)
downloadsamba-68559b787e7c9a83e055493bde638ec02e1097d1.tar.gz
samba-68559b787e7c9a83e055493bde638ec02e1097d1.tar.bz2
samba-68559b787e7c9a83e055493bde638ec02e1097d1.zip
tdb: Enhance lock tracking a bit
lock-tracking.c mirrors the in-kernel fcntl structures to detect unexpected use of fcntl calls. During my mutex work I changed our fcntl use so that we unlock the allrecord_lock in two pieces: The range covering the hash locks and the range covering the data area for the individual traverse record locks. Splitting locks is not covered by lock-tracking.c. This patch extends lock-tracking.c with this little piece. It's still far from complete to track the full range of fcntl semantics. It is not strictly needed right now, but it does not hurt either. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
-rw-r--r--lib/tdb/test/lock-tracking.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/tdb/test/lock-tracking.c b/lib/tdb/test/lock-tracking.c
index 90a07f8ef1..b2f092c0c4 100644
--- a/lib/tdb/test/lock-tracking.c
+++ b/lib/tdb/test/lock-tracking.c
@@ -65,6 +65,17 @@ int fcntl_with_lockcheck(int fd, int cmd, ... /* arg */ )
}
break;
}
+ if (((*l)->off == fl->l_start)
+ && ((*l)->len == 0)
+ && (ret == 0)) {
+ /*
+ * Remove a piece from the start of the
+ * allrecord_lock
+ */
+ old = *l;
+ (*l)->off += fl->l_len;
+ break;
+ }
}
if (!old && !suppress_lockcheck) {
diag("Unknown unlock %u@%u - %i",