libmdb: Set close-on-exec flag on lockfile

vmware
Hallvard Furuseth 13 years ago
parent 4a0b30499c
commit 6d0b424dbe
  1. 17
      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.
*/

Loading…
Cancel
Save