1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

fiber: fix machine stack marking when FIBER_USE_NATIVE is 0

* cont.c (cont_mark): mark Fiber machine stack correctly when
  FIBER_USE_NATIVE is 0
* test/ruby/test_fiber.rb (test_mark_fiber): new test
  [Bug #13875] [ruby-core:82681]

This bug appears to be introduced with r59557.
("refactoring Fiber status")

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59785 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2017-09-08 23:51:14 +00:00
parent 5804d24f51
commit 01fdd48fed
2 changed files with 12 additions and 1 deletions

2
cont.c
View file

@ -248,7 +248,7 @@ cont_mark(void *ptr)
const rb_thread_t *th = rb_thread_ptr(cont->saved_thread.self);
const rb_fiber_t *fib = (rb_fiber_t*)cont;
if ((th->ec.fiber != fib) && FIBER_SUSPENDED_P(fib)) {
if ((th->ec.fiber != fib) && !FIBER_TERMINATED_P(fib)) {
rb_gc_mark_locations(cont->machine.stack,
cont->machine.stack + cont->machine.stack_size);
}

View file

@ -217,6 +217,17 @@ class TestFiber < Test::Unit::TestCase
}, bug4612
end
def test_mark_fiber
bug13875 = '[ruby-core:82681]'
assert_normal_exit %q{
GC.stress = true
up = 1.upto(10)
down = 10.downto(1)
up.zip(down) {|a, b| a + b == 11 or fail 'oops'}
}, bug13875
end
def test_no_valid_cfp
bug5083 = '[ruby-dev:44208]'
assert_equal([], Fiber.new(&Module.method(:nesting)).resume, bug5083)