]> git.sur5r.net Git - openldap/commitdiff
ITS#8505 Clarify fork() caveat, mdb_env_get_fd(), flock->fcntl.
authorHallvard Furuseth <hallvard@openldap.org>
Tue, 27 Sep 2016 05:03:42 +0000 (07:03 +0200)
committerHallvard Furuseth <hallvard@openldap.org>
Tue, 4 Oct 2016 19:16:27 +0000 (21:16 +0200)
libraries/liblmdb/lmdb.h

index 30d586203ac21b4703ca151a87d216d05558c488..319fcf62f13b4dbd5806aecdcd03ad59cd530e00 100644 (file)
  *       transactions.  Each transaction belongs to one thread.  See below.
  *       The #MDB_NOTLS flag changes this for read-only transactions.
  *
- *     - Use an MDB_env* in the process which opened it, without fork()ing.
+ *     - Use an MDB_env* in the process which opened it, not after fork().
  *
  *     - Do not have open an LMDB database twice in the same process at
  *       the same time.  Not even from a plain open() call - close()ing it
- *       breaks flock() advisory locking.
+ *       breaks fcntl() advisory locking.  (It is OK to reopen it after
+ *       fork() - exec*(), since the lockfile has FD_CLOEXEC set.)
  *
  *     - Avoid long-lived transactions.  Read transactions prevent
  *       reuse of pages freed by newer write transactions, thus the
@@ -826,6 +827,10 @@ int  mdb_env_get_flags(MDB_env *env, unsigned int *flags);
 int  mdb_env_get_path(MDB_env *env, const char **path);
 
        /** @brief Return the filedescriptor for the given environment.
+        *
+        * This function may be called after fork(), so the descriptor can be
+        * closed before exec*().  Other LMDB file descriptors have FD_CLOEXEC.
+        * (Until LMDB 0.9.18, only the lockfile had that.)
         *
         * @param[in] env An environment handle returned by #mdb_env_create()
         * @param[out] fd Address of a mdb_filehandle_t to contain the descriptor.