summaryrefslogtreecommitdiff
path: root/libraries
diff options
context:
space:
mode:
authorHallvard Furuseth <hallvard@openldap.org>2016-09-27 07:03:38 +0200
committerHallvard Furuseth <hallvard@openldap.org>2016-10-04 19:12:58 +0200
commit04acac634a7b276332e2cc4d389b8d647a0a7fad (patch)
treee5a8be9cc6f7cdae3f63e5757b25f4ded8f39483 /libraries
parent15666878afb57439abfaf5c5a1f3a338f4e23104 (diff)
downloadlmdb-04acac634a7b276332e2cc4d389b8d647a0a7fad.tar.gz
lmdb-04acac634a7b276332e2cc4d389b8d647a0a7fad.tar.bz2
lmdb-04acac634a7b276332e2cc4d389b8d647a0a7fad.zip
ITS#8505 Set FD_CLOEXEC for me_mfd,env_copy as well
Diffstat (limited to 'libraries')
-rw-r--r--libraries/liblmdb/mdb.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/libraries/liblmdb/mdb.c b/libraries/liblmdb/mdb.c
index 0a7fcc0..27582ae 100644
--- a/libraries/liblmdb/mdb.c
+++ b/libraries/liblmdb/mdb.c
@@ -4462,8 +4462,8 @@ enum mdb_fopen_type {
/* A comment in mdb_fopen() explains some O_* flag choices. */
MDB_O_RDONLY= O_RDONLY, /**< for RDONLY me_fd */
MDB_O_RDWR = O_RDWR |O_CREAT, /**< for me_fd */
- MDB_O_META = O_RDWR |MDB_DSYNC, /**< for me_mfd */
- MDB_O_COPY = O_WRONLY|O_CREAT|O_EXCL, /**< for #mdb_env_copy() */
+ MDB_O_META = O_RDWR |MDB_DSYNC |MDB_CLOEXEC, /**< for me_mfd */
+ MDB_O_COPY = O_WRONLY|O_CREAT|O_EXCL|MDB_CLOEXEC, /**< for #mdb_env_copy() */
/** Bitmask for open() flags in enum #mdb_fopen_type. The other bits
* distinguish otherwise-equal MDB_O_* constants from each other.
*/
@@ -4507,6 +4507,9 @@ mdb_fopen(const MDB_env *env, MDB_name *fname,
*
* The lockfile needs FD_CLOEXEC (close file descriptor on exec*())
* to avoid the flock() issues noted under Caveats in lmdb.h.
+ * Also set it for other filehandles which the user cannot get at
+ * and close himself, which he may need after fork(). I.e. all but
+ * me_fd, which programs do use via mdb_env_get_fd().
*/
#ifdef _WIN32
@@ -4540,7 +4543,7 @@ mdb_fopen(const MDB_env *env, MDB_name *fname,
rc = ErrCode();
#ifndef _WIN32
else {
- if (which == MDB_O_LOCKS) {
+ if (which != MDB_O_RDONLY && which != MDB_O_RDWR) {
/* Set CLOEXEC if we could not pass it to open() */
if (!MDB_CLOEXEC && (flags = fcntl(fd, F_GETFD)) != -1)
(void) fcntl(fd, F_SETFD, flags | FD_CLOEXEC);