yarv-diff:275
From: ko1 atdot.net
Date: 18 Feb 2006 16:20:08 -0000
Subject: [yarv-diff:275] r439 - in trunk: . lib
Author: aamine
Date: 2006-02-19 01:20:07 +0900 (Sun, 19 Feb 2006)
New Revision: 439
Modified:
trunk/ChangeLog
trunk/lib/thread.rb
Log:
* lib/thread.rb (SizedQueue): didn't work. This patch was contributed by yukimizake. [yarv-dev:916]
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2006-02-17 17:51:30 UTC (rev 438)
+++ trunk/ChangeLog 2006-02-18 16:20:07 UTC (rev 439)
@@ -4,6 +4,12 @@
# from Mon, 03 May 2004 01:24:19 +0900
#
+2006-02-19(Sun) 01:19:42 +0900 Minero Aoki <aamine loveruby.net>
+
+ * lib/thread.rb (SizedQueue): didn't work. This patch was
+ contributed by yukimizake. [yarv-dev:916]
+
+
2006-02-18(Sat) 02:40:18 +0900 Koichi Sasada <ko1 atdot.net>
* insns.def, vm.c, vm_macro.def : change BMETHOD algorithm
Modified: trunk/lib/thread.rb
===================================================================
--- trunk/lib/thread.rb 2006-02-17 17:51:30 UTC (rev 438)
+++ trunk/lib/thread.rb 2006-02-18 16:20:07 UTC (rev 439)
@@ -292,13 +292,23 @@
def push(obj)
while true
@mutex.lock
- break if @que.length >= @max
+ break if @que.length <= @max
@queue_wait.push Thread.current
- @mutex.unlock_and_sleep
+ @mutex.unlock_and_stop
end
- super
+ @que.push obj
+ begin
+ t = @waiting.shift
+ t.wakeup if t
+ rescue ThreadError
+ retry
+ end
ensure
@mutex.unlock
+ begin
+ t.run if t
+ rescue ThreadError
+ end
end
#
--
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml