General

Profile

ko1 (Koichi Sasada)

  • Login: ko1
  • Registered on: 05/28/2008
  • Last sign in: 08/18/2026

Issues

open closed Total
Assigned issues 77 658 735
Reported issues 17 206 223

Projects

Project Roles Registered on
Ruby Committer 05/28/2008

Activity

08/23/2026

08:39 PM Ruby Revision 3c19a7c1 (git): thread: shard the io-wait bookkeeping by fd
Every io wait took timer_th.waiting_lock to register and again to wake:
one global lock serialized the fd map, the epoll_ctl calls made under
it, the timer wheel and the wake-pending flags, across all fds.
Split the ownership:
- an fd's...
ko1 (Koichi Sasada)
07:37 PM Ruby Revision a9a3c2bb (git): ractor: skip blocking_cnt bookkeeping on pthread
rb_ractor_blocking_threads_inc/dec took the VM lock on every blocking
region boundary of a ractor's last runnable thread -- for a 1-thread
ractor, twice per IO operation -- to maintain vm->ractor.blocking_cnt.
That counter is only consum...
ko1 (Koichi Sasada)
05:52 PM Ruby Revision 8d46d62f (git): thread: keep context switches off the scheduler lock
thread_sched_setup_running_threads runs on every context switch (park,
resume, and both ends of every blocking region) and took the global
ractor.sched.lock to maintain the running_threads and timeslice lists
and running_cnt. With many ...
ko1 (Koichi Sasada)
02:13 AM Ruby Revision 14ed94c4 (git): remove undefiend `USE_RUBY_DEBUG_LOG`
and allow to declare `dnt_cnt` only for logging. ko1 (Koichi Sasada)
01:01 AM Ruby Revision 1a71be6d (git): thread: leave the shared pool without the scheduler lock
native_thread_dedicated_inc/dec run on every blocking region boundary and
took ractor.sched.lock each way just to move two counters. Make snt_cnt a
seq-cst atomic: leaving the pool is one FETCH_SUB, and rejoining is a CAS
loop that enfo...
ko1 (Koichi Sasada)

08/22/2026

11:02 PM Ruby Revision 5b9c84ca (git): A forked child has one Ractor, but not one objspace
rb_gc_single_objspace_p() answered "single" as soon as
ruby_single_main_ractor was set, and rb_ractor_atfork() sets it again in
the child. The pre-fork Ractors' objspaces are still parked in
zombie_objspaces at that point, so the child'...
ko1 (Koichi Sasada)
10:31 PM Ruby Revision 0135fd29 (git): Take a timed sleep on the scheduler condvar, not on a second one
A dedicated native thread used to sleep in two stages: native_cond_sleep()
parked it on nt->cond.intr inside a blocking region, and on wakeup it went
back to the scheduler to wait for its running turn on nt->cond.readyq. The
thread sche...
ko1 (Koichi Sasada)
09:05 PM Ruby Revision 9e295209 (git): Keep a timer-thread wake batch from naming a freed thread
The timer thread delivers expiry and fd wakeups in batches: it collects
{thread, serial} pairs under timer_th.waiting_lock, releases the lock (the
scheduler lock a wakeup takes must not nest inside it), and then wakes each
thread. Unlin...
ko1 (Koichi Sasada)

08/21/2026

03:07 PM Ruby Revision d32793fe (git): Ractor: let a wait for a message take a timeout
Ractor::Port#receive, Ractor.receive and Ractor.select gain a `timeout:`
keyword and return nil when it passes.
The wait itself stays where it is: rb_ractor_sched_wait() keeps parking the
thread in the thread scheduler, so an M:N thread...
ko1 (Koichi Sasada)
12:44 PM Ruby Revision d97ad82c (git): Retry TestGc#test_stat_heap_constraints once
The test reads GC.stat and GC.stat_heap separately and asserts that the
per-heap values sum to the totals. Both come from the same counters
(objspace_live_slots() is the sum of the per-heap live slots, and so on), so
they only disagree ...
ko1 (Koichi Sasada)

Also available in: Atom