diff options
author | Volker Lendecke <vl@samba.org> | 2010-03-25 16:02:54 +0100 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2010-03-25 16:40:44 +0100 |
commit | 5a88e43c693f9e0c5dd93e4fd238364262643b5a (patch) | |
tree | ad3d17a1ea68bc7a6923e1441defdd316023b552 /source3/lib | |
parent | ed189459b9d7776700ffd353f81b283232940199 (diff) | |
download | samba-5a88e43c693f9e0c5dd93e4fd238364262643b5a.tar.gz samba-5a88e43c693f9e0c5dd93e4fd238364262643b5a.tar.bz2 samba-5a88e43c693f9e0c5dd93e4fd238364262643b5a.zip |
s3: Make sure our CLEAR_IF_FIRST optimization works for serverid.tdb
In the child, we fully re-open serverid.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')
-rw-r--r-- | source3/lib/serverid.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c index 9842ead103..5401eed974 100644 --- a/source3/lib/serverid.c +++ b/source3/lib/serverid.c @@ -27,6 +27,22 @@ struct serverid_key { #endif }; +bool serverid_parent_init(void) +{ + struct tdb_wrap *db; + + db = tdb_wrap_open(talloc_autofree_context(), + lock_path("serverid.tdb"), + 0, TDB_DEFAULT|TDB_CLEAR_IF_FIRST, O_RDWR|O_CREAT, + 0644); + if (db == NULL) { + DEBUG(1, ("could not open serverid.tdb: %s\n", + strerror(errno))); + return false; + } + return true; +} + struct serverid_data { uint64_t unique_id; uint32_t msg_flags; |