From a2820c8db97c05d4fc11e04048c123e1da24da88 Mon Sep 17 00:00:00 2001 From: Rick Reed Date: Thu, 13 Dec 2012 10:13:53 -0800 Subject: Use closefrom(2) when available in child_setup --- erts/configure.in | 2 +- erts/emulator/sys/unix/erl_child_setup.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/erts/configure.in b/erts/configure.in index 074882532f..6d5eca8966 100644 --- a/erts/configure.in +++ b/erts/configure.in @@ -1151,7 +1151,7 @@ fi AC_SUBST(ERTS_BUILD_SMP_EMU) -AC_CHECK_FUNCS([posix_fadvise]) +AC_CHECK_FUNCS([posix_fadvise closefrom]) AC_CHECK_HEADERS([linux/falloc.h]) dnl * Old glibcs have broken fallocate64(). Make sure not to use it. AC_CACHE_CHECK([whether fallocate() works],i_cv_fallocate_works,[ diff --git a/erts/emulator/sys/unix/erl_child_setup.c b/erts/emulator/sys/unix/erl_child_setup.c index 7c6e4a2f37..99d2b2a739 100644 --- a/erts/emulator/sys/unix/erl_child_setup.c +++ b/erts/emulator/sys/unix/erl_child_setup.c @@ -89,8 +89,12 @@ main(int argc, char *argv[]) if (sscanf(argv[CS_ARGV_FD_CR_IX], "%d:%d", &from, &to) != 2) return 1; +#if defined(HAVE_CLOSEFROM) + closefrom(from); +#else for (i = from; i <= to; i++) (void) close(i); +#endif if (!(argv[CS_ARGV_WD_IX][0] == '.' && argv[CS_ARGV_WD_IX][1] == '\0') && chdir(argv[CS_ARGV_WD_IX]) < 0) -- cgit v1.2.3