tdb: Reimplementation of Metze's "lib/tdb: if we know pwrite and pread are thread...
authorRusty Russell <rusty@rustcorp.com.au>
Thu, 30 Jul 2009 02:22:08 +0000 (11:52 +0930)
committerKarolin Seeger <kseeger@samba.org>
Fri, 14 Aug 2009 08:15:08 +0000 (10:15 +0200)
commit5d1e254188373de838cfe046118267701ee6cd5a
tree2042c0f7d780649903a21d865d886e295d34251b
parentf1cf84c9b9abc48a58355400acb63fd79e1d60c4
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.
lib/tdb/common/open.c