diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-10-30 13:48:35 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-10-30 13:48:35 +0000 |
commit | e7f8c03818873b7cd64cb5080fe329098352af6c (patch) | |
tree | 216672d258660b66cfa9e9d3fd8a6c38460acb5a | |
parent | a3efca16a12044b46f0e305ddcacfe6d412afcca (diff) | |
download | ruby-e7f8c03818873b7cd64cb5080fe329098352af6c.tar.gz |
* configure.in: check pipe2.
* io.c (rb_cloexec_pipe): use pipe2 if available.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | io.c | 18 |
3 files changed, 25 insertions, 1 deletions
@@ -1,3 +1,9 @@ +Sun Oct 30 22:46:46 2011 Tanaka Akira <akr@fsij.org> + + * configure.in: check pipe2. + + * io.c (rb_cloexec_pipe): use pipe2 if available. + Sun Oct 30 22:32:44 2011 Tanaka Akira <akr@fsij.org> * ruby.c (fill_standard_fds): use fstat() instead of fcntl(F_GETFD) diff --git a/configure.in b/configure.in index bf81905f0a..530301222c 100644 --- a/configure.in +++ b/configure.in @@ -1352,7 +1352,7 @@ AC_CHECK_FUNCS(fmod killpg wait4 waitpid fork spawnv syscall __syscall chroot ge setuid setgid daemon select_large_fdset setenv unsetenv\ mktime timegm gmtime_r clock_gettime gettimeofday poll ppoll\ pread sendfile shutdown sigaltstack dl_iterate_phdr\ - dup3) + dup3 pipe2) AC_CACHE_CHECK(for unsetenv returns a value, rb_cv_unsetenv_return_value, [AC_TRY_COMPILE([ @@ -266,7 +266,25 @@ int rb_cloexec_pipe(int fildes[2]) { int ret; + +#if defined(HAVE_PIPE2) + static int try_pipe2 = 1; + if (try_pipe2) { + ret = pipe2(fildes, O_CLOEXEC); + if (ret != -1) + return ret; + /* pipe2 is available since Linux 2.6.27. */ + if (errno == ENOSYS) { + try_pipe2 = 0; + ret = pipe(fildes); + } + } + else { + ret = pipe(fildes); + } +#else ret = pipe(fildes); +#endif if (ret == -1) return -1; #ifdef __CYGWIN__ if (ret == 0 && fildes[1] == -1) { |