summaryrefslogtreecommitdiff
path: root/test/ruby/test_process.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-02 06:50:28 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-02 06:50:28 +0000
commitb6cc839db4de2a6faf2c7ff171bd0b3c455b070f (patch)
treee7bebe555a3bdd5d13a28c6dbe6678733fb38990 /test/ruby/test_process.rb
parent7be21a316f29832f17bea4d8a2820258369931e7 (diff)
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/ruby/test_process.rb')
-rw-r--r--test/ruby/test_process.rb74
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)