summaryrefslogtreecommitdiff
path: root/test/ruby/test_array.rb
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-04-10 10:16:24 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-04-10 10:16:24 +0000
commitf19bf5ba5a59631e9d6340d3352b9d9ef20945af (patch)
tree6e04f04b4eb78ccd42315e7b17f343c9a25e005c /test/ruby/test_array.rb
parentbe512007850642da7a02dae0460a2d4f2eea538a (diff)
* 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/ruby/test_array.rb')
-rw-r--r--test/ruby/test_array.rb25
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