Hi

2011/9/20 Eric Wong <normalperson / yhbt.net>:
> Mike Perham <mperham / gmail.com> wrote:
>> ruby -v: ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0=
]
>>
>> See gist at https://gist.github.com/1228184 for a reproducible test case=
.
>
> I can confirm the test case fails on 1.9.2-p290 on x86_32 Linux, too.
>
> ruby_1_9_3 r33290 appears good, however. =A0The GVL was reimplemented for
> 1.9.3 to improve fairness and performance, so there are likely bugs
> fixed along the way.

The bug was fixed by following commit. (r27711)
It haven't backported 1.9.2 yet.

commit f4053cf5554deb0051aabfc90180784236f1f25b
Author: mame <mame / b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
Date:   Sun May 9 17:10:18 2010 +0000

    * lib/thread.rb (ConditionVariable#wait): ensure to remove the current
      thread from waiters.  [ruby-core:29835]

    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27711
b2dd03c8-39d4-4d8f-98ff-823fe69b080e

diff --git a/ChangeLog b/ChangeLog
index 7677a70..91c0e41 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon May 10 02:07:20 2010  Yusuke Endoh  <mame / tsg.ne.jp>
+
+       * lib/thread.rb (ConditionVariable#wait): ensure to remove the curr=
ent
+         thread from waiters.  [ruby-core:29835]
+
 Mon May 10 00:54:15 2010  Nobuyoshi Nakada  <nobu / ruby-lang.org>

        * ext/io/console/console.c (console_set_raw): new method.
diff --git a/lib/thread.rb b/lib/thread.rb
index f3831a7..88f834c 100644
--- a/lib/thread.rb
+++ b/lib/thread.rb
@@ -69,6 +69,10 @@ class ConditionVariable
         @waiters.push(Thread.current)
       end
       mutex.sleep timeout
+    ensure
+      @waiters_mutex.synchronize do
+        @waiters.delete(Thread.current)
+      end
     end
     self
   end