diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-04-10 10:16:24 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-04-10 10:16:24 +0000 |
commit | f19bf5ba5a59631e9d6340d3352b9d9ef20945af (patch) | |
tree | 6e04f04b4eb78ccd42315e7b17f343c9a25e005c /test | |
parent | be512007850642da7a02dae0460a2d4f2eea538a (diff) | |
download | ruby-f19bf5ba5a59631e9d6340d3352b9d9ef20945af.tar.gz |
* array.c (rb_ary_modify): remember shared array owner if a shared
array owner is promoted and a shared array is not promoted.
Now, shared array is WB-unprotected so that shared arrays are not
promoted. All objects referred from shared array should be marked
correctly.
[ruby-core:61919] [ruby-trunk - Bug #9718]
* test/ruby/test_array.rb: add a test for above.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45553 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/ruby/test_array.rb | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb index d8ee3abb28..0bd138cc49 100644 --- a/test/ruby/test_array.rb +++ b/test/ruby/test_array.rb @@ -2389,7 +2389,7 @@ class TestArray < Test::Unit::TestCase assert_equal([], a.rotate!(13)) assert_equal([], a.rotate!(-13)) a = [].freeze - assert_raise_with_message(RuntimeError, /can't modify frozen/) {a.rotate!} + assert_raise_with_message(RuntimeError, /can\'t modify frozen/) {a.rotate!} a = [1,2,3] assert_raise(ArgumentError) { a.rotate!(1, 1) } end @@ -2428,4 +2428,27 @@ class TestArray < Test::Unit::TestCase assert_include([4, 7], a.bsearch {|x| (2**100).coerce((1 - x / 4) * (2**100)).first }) end + + def test_shared_marking + assert_normal_exit <<-EOS, '[Bug #9718]' + begin + require 'timeout' + timeout(5) do + queue = [] + i = 0 + srand(0) + loop do + if (i+=1) > rand(100_000) + GC.verify_internal_consistency + queue.shift.call + i = 0 + end + queue << lambda{} + end + end + rescue TimeoutError + assert(true) + end + EOS + end end |