Bug #22096
Updated by luke-gru (Luke Gruber) 4 months ago
While freeing a locked mutex, if there is a waiter for the mutex it could call `rb_fiber_scheduler_unblock` which calls into Ruby code.
The function `rb_mutex_unlock_th` was a footgun because it was used during normal Ruby code and also during GC. The fix is to not call this function during GC and simply remove the mutex from `th->keeping_mutexes`.
[PR](https://github.com/ruby/ruby/pull/17204)
[Backport PR](https://github.com/ruby/ruby/pull/17241)