summaryrefslogtreecommitdiff
path: root/source3/lib/messages_local.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2010-03-25 15:59:41 +0100
committerVolker Lendecke <vl@samba.org>2010-03-25 16:40:44 +0100
commit4cdbe07b2563b56c2d8b9a5733eedf25245ba86b (patch)
tree4d1bfeb88718fa894ff00ac02b17b2404548babd /source3/lib/messages_local.c
parentf20bdd32ddabf79800c876fa94b65b928bea3c30 (diff)
downloadsamba-4cdbe07b2563b56c2d8b9a5733eedf25245ba86b.tar.gz
samba-4cdbe07b2563b56c2d8b9a5733eedf25245ba86b.tar.bz2
samba-4cdbe07b2563b56c2d8b9a5733eedf25245ba86b.zip
s3: Make sure our CLEAR_IF_FIRST optimization works for messaging.tdb
In the child, we fully re-open messaging.tdb, which leads to one fcntl lock for CLEAR_IF_FIRST detection per smbd. This opens the tdb in the parent and holds it, so that tdb_reopen_all correctly catches the CLEAR_IF_FIRST bit.
Diffstat (limited to 'source3/lib/messages_local.c')
-rw-r--r--source3/lib/messages_local.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/source3/lib/messages_local.c b/source3/lib/messages_local.c
index a58c7eb95f..b1712823a1 100644
--- a/source3/lib/messages_local.c
+++ b/source3/lib/messages_local.c
@@ -133,6 +133,22 @@ NTSTATUS messaging_tdb_init(struct messaging_context *msg_ctx,
return NT_STATUS_OK;
}
+bool messaging_tdb_parent_init(void)
+{
+ struct tdb_wrap *db;
+
+ db = tdb_wrap_open(talloc_autofree_context(),
+ lock_path("messages.tdb"), 0,
+ TDB_CLEAR_IF_FIRST|TDB_DEFAULT|TDB_VOLATILE,
+ O_RDWR|O_CREAT,0600);
+ if (db == NULL) {
+ DEBUG(1, ("could not open messaging.tdb: %s\n",
+ strerror(errno)));
+ return false;
+ }
+ return true;
+}
+
/*******************************************************************
Form a static tdb key from a pid.
******************************************************************/