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); size = GetFileSize(env->me_lfd, NULL);
#else #else
if ((env->me_lfd = open(lpath, O_RDWR|O_CREAT, mode)) == -1) { #if !(O_CLOEXEC)
rc = ErrCode(); {
return rc; 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 /* Try to get exclusive lock. If we succeed, then
* nobody is using the lock region and we should initialize it. * nobody is using the lock region and we should initialize it.
*/ */

Loading…
Cancel
Save