mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
io.c: disable nonblocking-by-default on win32 pipes
Lets admit Windows will always be too different from POSIX-like platforms and non-blocking may never work as well or consistently. [ruby-core:90042] [ruby-core:90044] [Bug #14968] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65962 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cc6020b7aa
commit
608b9c2913
1 changed files with 13 additions and 3 deletions
16
io.c
16
io.c
|
@ -135,6 +135,14 @@ off_t __syscall(quad_t number, ...);
|
||||||
#define rename(f, t) rb_w32_urename((f), (t))
|
#define rename(f, t) rb_w32_urename((f), (t))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
# define RUBY_PIPE_NONBLOCK_DEFAULT (0)
|
||||||
|
#elif defined(O_NONBLOCK)
|
||||||
|
# define RUBY_PIPE_NONBLOCK_DEFAULT (O_NONBLOCK)
|
||||||
|
#else /* any platforms where O_NONBLOCK does not exist? */
|
||||||
|
# define RUBY_PIPE_NONBLOCK_DEFAULT (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
VALUE rb_cIO;
|
VALUE rb_cIO;
|
||||||
VALUE rb_eEOFError;
|
VALUE rb_eEOFError;
|
||||||
VALUE rb_eIOError;
|
VALUE rb_eIOError;
|
||||||
|
@ -345,7 +353,7 @@ rb_cloexec_pipe(int fildes[2])
|
||||||
#if defined(HAVE_PIPE2)
|
#if defined(HAVE_PIPE2)
|
||||||
static int try_pipe2 = 1;
|
static int try_pipe2 = 1;
|
||||||
if (try_pipe2) {
|
if (try_pipe2) {
|
||||||
ret = pipe2(fildes, O_CLOEXEC | O_NONBLOCK);
|
ret = pipe2(fildes, O_CLOEXEC | RUBY_PIPE_NONBLOCK_DEFAULT);
|
||||||
if (ret != -1)
|
if (ret != -1)
|
||||||
return ret;
|
return ret;
|
||||||
/* pipe2 is available since Linux 2.6.27, glibc 2.9. */
|
/* pipe2 is available since Linux 2.6.27, glibc 2.9. */
|
||||||
|
@ -371,8 +379,10 @@ rb_cloexec_pipe(int fildes[2])
|
||||||
#endif
|
#endif
|
||||||
rb_maygvl_fd_fix_cloexec(fildes[0]);
|
rb_maygvl_fd_fix_cloexec(fildes[0]);
|
||||||
rb_maygvl_fd_fix_cloexec(fildes[1]);
|
rb_maygvl_fd_fix_cloexec(fildes[1]);
|
||||||
rb_fd_set_nonblock(fildes[0]);
|
if (RUBY_PIPE_NONBLOCK_DEFAULT) {
|
||||||
rb_fd_set_nonblock(fildes[1]);
|
rb_fd_set_nonblock(fildes[0]);
|
||||||
|
rb_fd_set_nonblock(fildes[1]);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue