summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/ruby/test_weakmap.rb10
-rw-r--r--weakmap.c2
2 files changed, 11 insertions, 1 deletions
diff --git a/test/ruby/test_weakmap.rb b/test/ruby/test_weakmap.rb
index d84eb8241e..9bbe2d6b81 100644
--- a/test/ruby/test_weakmap.rb
+++ b/test/ruby/test_weakmap.rb
@@ -183,5 +183,15 @@ class TestWeakMap < Test::Unit::TestCase
GC.compact
@wm[i] = obj
end
+
+ assert_separately(%w(--disable-gems), <<-'end;')
+ wm = ObjectSpace::WeakMap.new
+ obj = Object.new
+ 100.times do
+ wm[Object.new] = obj
+ GC.start
+ end
+ GC.compact
+ end;
end
end
diff --git a/weakmap.c b/weakmap.c
index 2145e4d2f8..1e86f22988 100644
--- a/weakmap.c
+++ b/weakmap.c
@@ -17,7 +17,7 @@ wmap_replace_ref(st_data_t *key, st_data_t *value, st_data_t _argp, int existing
{
*key = rb_gc_location((VALUE)*key);
- VALUE *values = (VALUE *)value;
+ VALUE *values = (VALUE *)*value;
VALUE size = values[0];
for (VALUE index = 1; index <= size; index++) {