[Bug #19529]

The fix for [Bug #19529] in commit 548086b contained a bug that crashes
on the following script:

```
wm = ObjectSpace::WeakMap.new
obj = Object.new
100.times do
  wm[Object.new] = obj
  GC.start
end
GC.compact
```
This commit is contained in:
Peter Zhu 2023-03-14 23:18:11 -04:00
Родитель 70ba310212
Коммит 3dc8cde700
2 изменённых файлов: 11 добавлений и 1 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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++) {