岡田です。

SizedQueue#popですけど、実装が次のようでないとまずいのでは無いでしょうか?

--- thread.rb.old       Sun May 13 14:02:16 2001
+++ thread.rb   Sun May 13 14:03:33 2001
@@ -253,6 +253,7 @@
   end
 
   def pop(*args)
+    retval = super
     Thread.critical = true
     if @que.length < @max
       begin
@@ -265,7 +266,7 @@
       end
       t.run if t
     end
-    super
+    retval
   end
 
   def num_waiting


このパッチを当てた状態でないと

ruby -r thread -e 'q = SizedQueue.new(1); q.push(1); Thread.new{sleep 1; q.pop}; q.push(1);'   

というコードでdeadlockが起こってしまいます。

--
ゆん(岡田 潤)
yun / nekome.net
http://www.nekome.net/