From 0094f99a538ed287631cd9b7c298ea8e4f2cc34e Mon Sep 17 00:00:00 2001 From: Songstats Dependency Audit Date: Sat, 29 Aug 2026 22:50:59 +0200 Subject: [PATCH 1/2] Return Promises waiter count for inspection --- lib/concurrent-ruby/concurrent/promises.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/concurrent-ruby/concurrent/promises.rb b/lib/concurrent-ruby/concurrent/promises.rb index baad27d7d..e1a51b0aa 100644 --- a/lib/concurrent-ruby/concurrent/promises.rb +++ b/lib/concurrent-ruby/concurrent/promises.rb @@ -726,7 +726,7 @@ def touched? # For inspection. # @!visibility private def waiting_threads - @Waiters.each.to_a + @Waiters.value end # @!visibility private From 7a65eb53df9cc0e6ce42776deabc53e1bb75bffc Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Sun, 30 Aug 2026 14:38:12 +0700 Subject: [PATCH 2/2] Add waiter count regression coverage --- spec/concurrent/promises_spec.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spec/concurrent/promises_spec.rb b/spec/concurrent/promises_spec.rb index 4fd5df976..96b9e5ba0 100644 --- a/spec/concurrent/promises_spec.rb +++ b/spec/concurrent/promises_spec.rb @@ -607,6 +607,19 @@ def behaves_as_delay(delay, value) end describe 'ResolvableEvent' do + specify "#waiting_threads" do + event = resolvable_event + expect(event.waiting_threads).to eq 0 + + waiter = Thread.new { event.wait } + Thread.pass until waiter.status == "sleep" + + expect(event.waiting_threads).to eq 1 + ensure + event&.resolve(false) + waiter&.join + end + specify "#wait" do event = resolvable_event expect(event.wait(0, false)).to be_falsey