test_major_sweep_does_not_create_oldmalloc_debt assumed the ring was already old when the loop started. When Ruby is running with parse.y this isn't always the case. That only held when GCs ran while the ring was built. Under parse.y oft...eightbitraptor (Matt V-H)
The size_t atomics had add, sub, cas, exchange and fetch_add but no load, so the GC read its atomic size_t counters through the VALUE load with a cast. This commit adds RUBY_ATOMIC_SIZE_LOAD and rbimpl_atomic_size_load, following rbimpl...eightbitraptor (Matt V-H)
Since e631daf17b, gc_sweep_finish calls gc_malloc_counters_snapshot_free_at_last_gc on both oldcounters and counters. That is correct for counters, because gc_reset_malloc_info takes the baselines at every GC. However for oldcounters, b...eightbitraptor (Matt V-H)
test_retained_malloc_triggers_oldmalloc_major_gc relied on GC.start freeing the garbage array. On MinGW a stale stack slot can keep it alive, so it died in the first minor GC instead. Those frees brought oldmalloc_increase back to 0 and ...eightbitraptor (Matt V-H)
The zombie_objspaces table in gc.c kept a page count for each entry and a running total. gc.c asked the GC for the counts through rb_gc_impl_zombie_heap_page_count, and the default GC read the total back through rb_gc_vm_zombie_total_pag...eightbitraptor (Matt V-H)
Recently we added some keys to GC.stat in order to measure the GC performance of Ractor local GC and the associated global GC. This commit refactors some of those terms: "global" was used in two places with different meanings which coul...eightbitraptor (Matt V-H)
Applied in changeset commit:git|0d83a93784090400ce38f0852ae11bc103765810. ---------- Unshare arrays only when they become shareable obj_traverse_i called rb_ary_cancel_sharing on every array it visited, before the traversal knew whethe...eightbitraptor (Matt V-H)
obj_traverse_i called rb_ary_cancel_sharing on every array it visited, before the traversal knew whether the object graph was shareable. So Ractor.shareable? modified frozen arrays even when it returned false. This commit moves rb_ary_...eightbitraptor (Matt V-H)
`zjit_during_incremental_marking` was one process-wide global, written by `gc_set_incremental_marking` on every transition of any objspace. Since 24be314b45, two objspaces can run incremental marks at the same time, so when one finished ...eightbitraptor (Matt V-H)
Applied in changeset commit:git|d71692d49f30e60296bd57c932eb8877e83c3b4d. ---------- ZJIT: prepare options whenever the zjit feature is enabled --enable=zjit sets the zjit feature bit without parsing a --zjit option, so OPTIONS is neve...eightbitraptor (Matt V-H)