tdb: Reimplementation of Metze's "lib/tdb: if we know pwrite and pread are thread...
commitce20295f120a921d24f0205a866727b3d2cc2784
authorRusty Russell <rusty@rustcorp.com.au>
Thu, 30 Jul 2009 02:22:08 +0000 (30 11:52 +0930)
committerKarolin Seeger <kseeger@samba.org>
Fri, 14 Aug 2009 08:56:06 +0000 (14 10:56 +0200)
tree1e44ff7c36ee045fb66d65d09ee19b87049cf85f
parentf2d4ff4c8d60001043786f7a82468c0dc12692c0
tdb: Reimplementation of Metze's "lib/tdb: if we know pwrite and pread are thread/fork safe tdb_reopen_all() should be a noop".

This version just wraps the reopen code, so we still re-grab the lock and do
the normal sanity checks.

The reason we do this at all is to avoid global fd limits, see:
http://forums.fedoraforum.org/showthread.php?t=210393

Note also that this whole reopen concept is fundamentally racy: if the parent
goes away before the child calls tdb_reopen_all, the database can be left
without an active lock and another TDB_CLEAR_IF_FIRST opener will clear it.
A fork_with_tdbs() wrapper could use a pipe to solve this, but it's hardly
elegant (what if there are other independent things which have similar needs?).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
(cherry picked from commit 3b2f074bda8734a0b30a3e31117c0217d890809c)

Addresses bug #6601.
(cherry picked from commit 5d1e254188373de838cfe046118267701ee6cd5a)
lib/tdb/common/open.c