diff options
author | Peter Zhu <[email protected]> | 2024-12-24 15:30:48 -0500 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2025-01-02 11:03:04 -0500 |
commit | b8c4af24f920a973cfa1f7b671825e8a5421368c (patch) | |
tree | af3ed1273af100bd89d4993427d1f89099e206de /gc/default/default.c | |
parent | f9cd9a1b5574e99c3b87cc203bba7f2c552dae53 (diff) |
Use rb_darray_insert_without_gc for heap_pages darray
rb_darray_insert could trigger a GC, which would cause problems if it
freed pages while a new page was being inserted.
For example, the following script fails:
GC.stress = true
GC.auto_compact = :empty
10.times do
GC.verify_compaction_references(expand_heap: true, toward: :empty)
end
It errors out with:
'GC.verify_compaction_references': malloc: possible integer overflow (8*18446744073709551603) (ArgumentError)
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/12459
Diffstat (limited to 'gc/default/default.c')
-rw-r--r-- | gc/default/default.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/gc/default/default.c b/gc/default/default.c index b0267cc48c..94828be55d 100644 --- a/gc/default/default.c +++ b/gc/default/default.c @@ -1961,7 +1961,7 @@ heap_page_allocate(rb_objspace_t *objspace) } } - rb_darray_insert(&objspace->heap_pages.sorted, hi, page); + rb_darray_insert_without_gc(&objspace->heap_pages.sorted, hi, page); if (heap_pages_lomem == 0 || heap_pages_lomem > start) heap_pages_lomem = start; if (heap_pages_himem < end) heap_pages_himem = end; |