308677c703 moved the exit tokens over to ractor_basket_new_exit(), which left this one with no caller. Its comment carried the reason those tokens cannot push a tag, so that moves to ractor_basket_new_exit(). Co-Authored-By: Claude Opu...ko1 (Koichi Sasada)
setup_gc_stat_symbols(), setup_gc_stat_heap_symbols() and the symbols gc_info_decode() decodes were each filled on first use and guarded by their own first element. That element is also the first one written, so a second ractor arriving...ko1 (Koichi Sasada)
heap_init_bytes is a slot count target applied per objspace, bytes divided by each heap's slot size: heap_prepare fills a heap up to it before the first collection, gc_sweep_finish_heap puts a floor under the free slots a sweep should le...ko1 (Koichi Sasada)
A page with nothing live on it leaves its heap for the global empty pages, and may be returned to the system from there. When it is the heap's only page the heap is left with none, and nothing grows a heap in that state: gc_sweep_finish...ko1 (Koichi Sasada)
gc_marks_finish keeps at least heap_free_slots * r_mul slots free, where r_mul was the number of Ractors allocating from this objspace, capped at 8. Per-Ractor GC replaced that count with the VM-wide one, so every Ractor's objspace now ...ko1 (Koichi Sasada)
The initial heap size is a slot count target, bytes / slot_size for each heap, so below one slot in the largest heap heap_prepare never forces that heap's first page. RUBY_GC_RACTOR_HEAP_INIT_BYTES rejects such values; RUBY_GC_HEAP_INIT...ko1 (Koichi Sasada)
A monitoring port received a bare :exited or :aborted, so a port could only ever watch one ractor: with two, the token that arrived said what happened but not to which. Watching a group meant a port per ractor and a table from the port ...ko1 (Koichi Sasada)
select watched each Ractor through a Port it made for that ractor, and kept a Hash from the port back to the ractor because a bare exit token did not say which ractor it was about. Making a port keys it into the ractor's port table and ...ko1 (Koichi Sasada)
test_rehash mutates a key until its own `hash_hint` (the low byte of `Array#hash`) changes, then asserts the stale key no longer hits. Since 127e903860 "hash.c: add a substition hint", `ar_do_hash_hint()` maps RHASH_AR_CLEARED_HINT (0x0...ko1 (Koichi Sasada)
The ELFv2 ABI makes f14-f31 and v20-v31 callee-saved (OpenPOWER 64-bit ELF V2 ABI, 2.2.1 Register Roles), but coroutine_transfer saved only r14-r31, LR and CR. A coroutine resuming from a transfer therefore sees whatever the other side ...ko1 (Koichi Sasada)