lib/bunny/concurrent/continuation_queue.rb in bunny-2.6.3 vs lib/bunny/concurrent/continuation_queue.rb in bunny-2.6.4

- old
+ new

@@ -26,16 +26,20 @@ def poll(timeout_in_ms = nil) timeout = timeout_in_ms ? timeout_in_ms / 1000.0 : nil @lock.synchronize do - if @q.empty? - @cond.wait(@lock, timeout) - raise ::Timeout::Error if @q.empty? + timeout_strikes_at = Time.now.utc + (timeout || 0) + while @q.empty? + wait = if timeout + timeout_strikes_at - Time.now.utc + else + nil + end + @cond.wait(@lock, wait) + raise ::Timeout::Error if wait && Time.now.utc >= timeout_strikes_at end item = @q.shift - @cond.signal - item end end def clear