summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_fiber.rb23
1 files changed, 15 insertions, 8 deletions
diff --git a/test/ruby/test_fiber.rb b/test/ruby/test_fiber.rb
index c835246fda..1729147d5e 100644
--- a/test/ruby/test_fiber.rb
+++ b/test/ruby/test_fiber.rb
@@ -260,18 +260,25 @@ class TestFiber < Test::Unit::TestCase
end
def test_fork_from_fiber
- begin
- pid = Process.fork{}
- rescue NotImplementedError
- return
- else
- Process.wait(pid)
- end
+ skip 'fork not supported' unless Process.respond_to?(:fork)
+ pid = nil
bug5700 = '[ruby-core:41456]'
assert_nothing_raised(bug5700) do
Fiber.new do
pid = fork do
- Fiber.new {}.transfer
+ xpid = nil
+ Fiber.new {
+ xpid = fork do
+ # enough to trigger GC on old root fiber
+ 10000.times do
+ Fiber.new {}.transfer
+ Fiber.new { Fiber.yield }
+ end
+ exit!(0)
+ end
+ }.transfer
+ _, status = Process.waitpid2(xpid)
+ exit!(status.success?)
end
end.resume
end