From: "jeremyevans0 (Jeremy Evans)" Date: 2022-07-08T17:20:44+00:00 Subject: [ruby-core:109169] [Ruby master Bug#18904] Mutex and Fiber: No live threads left. Deadlock? (fatal) Issue #18904 has been updated by jeremyevans0 (Jeremy Evans). Status changed from Open to Rejected This isn't a bug. `Mutex` is not designed to be reentrant, so that will always fail in recursive use. `Monitor` is only reentrant in the same fiber, and you are using a separate fiber, so that should fail as well in this case. The `Monitor` case works in Ruby <3.0, before `Mutex`/`Monitor` were made fiber aware. However, this behavior change is not a regression, it was explicitly designed this way. ---------------------------------------- Bug #18904: Mutex and Fiber: No live threads left. Deadlock? (fatal) https://bugs.ruby-lang.org/issues/18904#change-98310 * Author: dorianmariefr (Dorian Mari��) * Status: Rejected * Priority: Normal * ruby -v: ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21] * Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN ---------------------------------------- Hi, I was investigating an issue with the climate_control gem and minitest-around and it seems like the bug is coming from Ruby: ```ruby def around(&block) Fiber.new do |context, resume| context.instance_exec(resume, &block) end.resume end MUTEX = Mutex.new around do MUTEX.synchronize do around do MUTEX.synchronize do end end end end ``` ``` test.rb:12:in `synchronize': No live threads left. Deadlock? (fatal) 1 threads, 1 sleeps current:0x0000000126804080 main thread:0x0000000126804080 * # rb_thread_t:0x0000000126804080 native:0x0000000104330580 int:0 from test.rb:12:in `block (3 levels) in
' from test.rb:3:in `instance_exec' from test.rb:3:in `block in around' ``` -- https://bugs.ruby-lang.org/ Unsubscribe: