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 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