From 4ef881bd15c9c4e2e9b20da2c091e80d4d530119 Mon Sep 17 00:00:00 2001 From: ko1 Date: Sun, 31 Dec 2006 15:02:22 +0000 Subject: * Merge YARV git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@11439 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/thread.rb | 263 +++++++++++++++++----------------------------------------- 1 file changed, 75 insertions(+), 188 deletions(-) (limited to 'lib/thread.rb') diff --git a/lib/thread.rb b/lib/thread.rb index 5d4fedc73..11c9d5a1c 100644 --- a/lib/thread.rb +++ b/lib/thread.rb @@ -13,7 +13,7 @@ unless defined? Thread end unless defined? ThreadError - class ThreadError= @max - @queue_wait.push Thread.current - Thread.stop - Thread.critical = true + t = nil + @mutex.synchronize{ + while true + break if @que.length <= @max + @queue_wait.push Thread.current + @mutex.sleep + end + + @que.push obj + begin + t = @waiting.shift + t.wakeup if t + rescue ThreadError + retry + end + } + + begin + t.run if t + rescue ThreadError end - super end # @@ -447,20 +334,20 @@ class SizedQueue