diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-03-02 06:50:28 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-03-02 06:50:28 +0000 |
commit | b6cc839db4de2a6faf2c7ff171bd0b3c455b070f (patch) | |
tree | e7bebe555a3bdd5d13a28c6dbe6678733fb38990 /test | |
parent | 7be21a316f29832f17bea4d8a2820258369931e7 (diff) | |
download | ruby-b6cc839db4de2a6faf2c7ff171bd0b3c455b070f.tar.gz |
test_process.rb: remove intermediate child process
* test/ruby/test_process.rb (test_deadlock_by_signal_at_forking):
spawn the target process directly with assert_separately and
remove intermediate child process.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49807 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_process.rb | 74 |
1 files changed, 12 insertions, 62 deletions
diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index f1fd2c25dc..a43a5fa1a9 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -1924,68 +1924,18 @@ EOS end def test_deadlock_by_signal_at_forking - assert_separately([], <<-INPUT, timeout: 60) - require 'io/wait' - begin - GC.start # reduce garbage - buf = '' - ruby = EnvUtil.rubybin - er, ew = IO.pipe - unless runner = IO.popen("-".freeze) - er.close - status = true - GC.disable # avoid triggering CoW after forks - begin - $stderr.reopen($stdout) - trap(:QUIT) {} - parent = $$ - 100.times do |i| - pid = fork {Process.kill(:QUIT, parent)} - IO.popen(ruby, 'r+'.freeze){} - Process.wait(pid) - $stdout.puts - $stdout.flush - end - ensure - if $! - ew.puts([Marshal.dump($!)].pack("m0")) - status = false - end - ew.close - exit!(status) - end - end - ew.close - begin - loop do - runner.wait_readable(5) - runner.read_nonblock(100, buf) - end - rescue EOFError => e - _, status = Process.wait2(runner.pid) - rescue IO::WaitReadable => e - Process.kill(:INT, runner.pid) - exc = Marshal.load(er.read.unpack("m")[0]) - if exc.kind_of? Interrupt - # Don't raise Interrupt. It aborts test-all. - flunk "timeout" - else - raise exc - end - end - assert_predicate(status, :success?) - ensure - er.close unless er.closed? - ew.close unless ew.closed? - if runner - begin - Process.kill(:TERM, runner.pid) - sleep 1 - Process.kill(:KILL, runner.pid) - rescue Errno::ESRCH - end - runner.close - end + assert_separately(["-", EnvUtil.rubybin], <<-INPUT, timeout: 60) + ruby = ARGV.shift + GC.start # reduce garbage + GC.disable # avoid triggering CoW after forks + trap(:QUIT) {} + parent = $$ + 100.times do |i| + pid = fork {Process.kill(:QUIT, parent)} + IO.popen(ruby, 'r+'){} + Process.wait(pid) + $stdout.puts + $stdout.flush end INPUT end if defined?(fork) |