diff options
author | Hallvard Furuseth <hallvard@openldap.org> | 2016-09-27 07:03:38 +0200 |
---|---|---|
committer | Hallvard Furuseth <hallvard@openldap.org> | 2016-10-04 19:12:58 +0200 |
commit | 04acac634a7b276332e2cc4d389b8d647a0a7fad (patch) | |
tree | e5a8be9cc6f7cdae3f63e5757b25f4ded8f39483 /libraries | |
parent | 15666878afb57439abfaf5c5a1f3a338f4e23104 (diff) | |
download | lmdb-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.c | 9 |
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); |