From: Hallvard Furuseth Date: Thu, 12 Apr 2012 05:34:13 +0000 (+0200) Subject: libmdb: Set close-on-exec flag on lockfile X-Git-Tag: OPENLDAP_REL_ENG_2_4_32~125^2~11 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6d0b424dbe2dd4abe75fad7b88def5088b7ff074;p=openldap libmdb: Set close-on-exec flag on lockfile --- diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c index 8280e22afb..879841ee1e 100644 --- a/libraries/libmdb/mdb.c +++ b/libraries/libmdb/mdb.c @@ -2734,11 +2734,22 @@ mdb_env_setup_locks(MDB_env *env, char *lpath, int mode, int *excl) } } size = GetFileSize(env->me_lfd, NULL); + #else - if ((env->me_lfd = open(lpath, O_RDWR|O_CREAT, mode)) == -1) { - rc = ErrCode(); - return rc; +#if !(O_CLOEXEC) + { + int fdflags; + if ((env->me_lfd = open(lpath, O_RDWR|O_CREAT, mode)) == -1) + return ErrCode(); + /* Lose record locks when exec*() */ + if ((fdflags = fcntl(env->me_lfd, F_GETFD) | FD_CLOEXEC) >= 0) + fcntl(env->me_lfd, F_SETFD, fdflags); } +#else /* O_CLOEXEC on Linux: Open file and set FD_CLOEXEC atomically */ + if ((env->me_lfd = open(lpath, O_RDWR|O_CREAT|O_CLOEXEC, mode)) == -1) + return ErrCode(); +#endif + /* Try to get exclusive lock. If we succeed, then * nobody is using the lock region and we should initialize it. */