summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--process.c6
-rw-r--r--test/lib/test/unit.rb2
-rw-r--r--test/ruby/test_process.rb9
3 files changed, 14 insertions, 3 deletions
diff --git a/process.c b/process.c
index 462a239d5e..a58f7ad39f 100644
--- a/process.c
+++ b/process.c
@@ -3496,7 +3496,7 @@ rb_execarg_run_options(const struct rb_execarg *eargp, struct rb_execarg *sargp,
}
#ifdef HAVE_WORKING_FORK
- if (!eargp->close_others_given || eargp->close_others_do) {
+ if (eargp->close_others_do) {
rb_close_before_exec(3, eargp->close_others_maxhint, eargp->redirect_fds); /* async-signal-safe */
}
#endif
@@ -4568,7 +4568,7 @@ rb_f_system(int argc, VALUE *argv)
* integer : the file descriptor of specified the integer
* io : the file descriptor specified as io.fileno
* file descriptor inheritance: close non-redirected non-standard fds (3, 4, 5, ...) or not
- * :close_others => true : don't inherit
+ * :close_others => false : inherit
* current directory:
* :chdir => str
*
@@ -4727,7 +4727,7 @@ rb_f_system(int argc, VALUE *argv)
* pid = spawn(command, :close_others=>true) # close 3,4,5,... (default)
* pid = spawn(command, :close_others=>false) # don't close 3,4,5,...
*
- * :close_others is true by default for spawn and IO.popen.
+ * :close_others is false by default for spawn and IO.popen.
*
* Note that fds which close-on-exec flag is already set are closed
* regardless of :close_others option.
diff --git a/test/lib/test/unit.rb b/test/lib/test/unit.rb
index 51c8960c52..7a09466d1c 100644
--- a/test/lib/test/unit.rb
+++ b/test/lib/test/unit.rb
@@ -145,6 +145,8 @@ module Test
r.close if r
nil
else
+ r.close_on_exec = true
+ w.close_on_exec = true
@jobserver = [r, w]
options[:parallel] ||= 1
end
diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb
index a0b08dd110..bb56834dc0 100644
--- a/test/ruby/test_process.rb
+++ b/test/ruby/test_process.rb
@@ -1009,6 +1009,15 @@ class TestProcess < Test::Unit::TestCase
}
end
+ def test_close_others_default_false
+ IO.pipe do |r,w|
+ w.close_on_exec = false
+ src = "IO.new(#{w.fileno}).puts(:hi)"
+ assert_equal true, system(*%W(#{RUBY} --disable=gems -e #{src}))
+ assert_equal "hi\n", r.gets
+ end
+ end
+
def test_execopts_redirect_self
begin
with_pipe {|r, w|