`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)
--enable=zjit sets the zjit feature bit without parsing a --zjit option, so OPTIONS is never initialized and rb_zjit_option_enable() returns false. ZJIT then stays disabled at boot. The same happens with --enable-zjit and RUBYOPT=--enab...eightbitraptor (Matt V-H)
@mame I've already started looking into this with https://github.com/ruby/ruby/pull/19170 so I'll take this one from @peterzhu2118 eightbitraptor (Matt V-H)
GC.stat(:global_gc_count) now reports the stop-the-world global cycles the current Ractor started, instead of mirroring the process-wide count, so the values can be summed across Ractors. GC.stat(:global_gc_count, scope: :global) gives t...eightbitraptor (Matt V-H)
Applied in changeset commit:git|e131720215251851efab1811a24c4d59a0fc979d. ---------- Use pthread_sigmask in the GC read barrier signal handler sigprocmask() is unspecified in multithreaded processes; on macOS it left SIGSEGV/SIGBUS blo...eightbitraptor (Matt V-H)
Match the per-objspace ordering of gc_compact_finish (unprotect, then update) across objspaces, so the update pass never faults on a foreign protected page and abandons that page's moves.eightbitraptor (Matt V-H)
sigprocmask() is unspecified in multithreaded processes; on macOS it left SIGSEGV/SIGBUS blocked on the faulting thread, so a second read-barrier fault was never delivered and the process hung on the faulting instruction. [Bug #22389]eightbitraptor (Matt V-H)