From: justin@... Date: 2014-01-18T03:30:09+00:00 Subject: [ruby-core:59835] [ruby-trunk - Bug #9342] [PATCH] SizedQueue#clear does not notify waiting threads in Ruby 1.9.3 Issue #9342 has been updated by Justin Collins. Thank you! As far as I can tell, SizedQueue#clear has never notified waiting threads since it was introduced in Ruby 1.4. Perhaps something with green threads allowed it to work anyway? It is definitely an issue in 1.9.3 and later. ---------------------------------------- Bug #9342: [PATCH] SizedQueue#clear does not notify waiting threads in Ruby 1.9.3 https://bugs.ruby-lang.org/issues/9342#change-44403 * Author: Justin Collins * Status: Closed * Priority: Normal * Assignee: Koichi Sasada * Category: ext * Target version: current: 2.2.0 * ruby -v: ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-darwin11.4.2] * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- In Ruby 1.9.3, when SizedQueue#clear is called, it empties the queue but does not notify waiting threads that the queue is empty. This typically leads to deadlock when the queue is full. For example: sq = SizedQueue.new(1) sq << 1 # Fill queue t1 = Thread.new do sq << 1 # Attempt to add another item to queue, fail and go to sleep waiting end t2 = Thread.new do Thread.pass sq.clear end t2.join # Empty queue t1.join # Deadlock, t1 continues to sleep ---Files-------------------------------- 0001-Wake-waiting-threads-when-SizedQueue-clear-is-called.patch (1.73 KB) 0002-Wake-waiting-threads-when-SizedQueue-clear-is-called-2.0.patch (769 Bytes) -- http://bugs.ruby-lang.org/