summaryrefslogtreecommitdiff
path: root/gc/default
diff options
context:
space:
mode:
authorPeter Zhu <[email protected]>2024-12-24 15:30:48 -0500
committerPeter Zhu <[email protected]>2025-01-02 11:03:04 -0500
commitb8c4af24f920a973cfa1f7b671825e8a5421368c (patch)
treeaf3ed1273af100bd89d4993427d1f89099e206de /gc/default
parentf9cd9a1b5574e99c3b87cc203bba7f2c552dae53 (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')
-rw-r--r--gc/default/default.c2
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;