[#13087] importing forwardable — "Akinori MUSHA" <knu@...>

 石塚さんの forwardable.rb を標準添付ライブラリにするべく、

11 messages 2001/05/02

[#13169] SizedQueue#pop causes deadlock — "Okada Jun" <yun@...>

岡田です。

18 messages 2001/05/13
[#13171] Re: SizedQueue#pop causes deadlock — "Akinori MUSHA" <knu@...> 2001/05/13

At Sun, 13 May 2001 14:11:18 +0900,

[#13176] Re: SizedQueue#pop causes deadlock — matz@... (Yukihiro Matsumoto) 2001/05/13

まつもと ゆきひろです

[#13177] Re: SizedQueue#pop causes deadlock — "Akinori MUSHA" <knu@...> 2001/05/13

At Mon, 14 May 2001 00:24:45 +0900,

[#13187] Re: SizedQueue#pop causes deadlock — matz@... (Yukihiro Matsumoto) 2001/05/13

まつもと ゆきひろです

[#13202] Re: [ruby-list:29672] Re: Enumerator — "Akinori MUSHA" <knu@...>

 ruby-dev に移ります。

26 messages 2001/05/15
[#13208] Re: [ruby-list:29672] Re: Enumerator — matz@... (Yukihiro Matsumoto) 2001/05/15

まつもと ゆきひろです

[#13259] Enumerator -- Round 2 — "Akinori MUSHA" <knu@...>

 もう一度、 Enumerable/Enumerator についてみなさんのご意見を

29 messages 2001/05/20
[#13260] Re: Enumerator -- Round 2 — matz@... (Yukihiro Matsumoto) 2001/05/20

まつもと ゆきひろです

[#13265] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/21

At Mon, 21 May 2001 06:04:32 +0900,

[#13268] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/21

原です。

[#13270] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/21

At Mon, 21 May 2001 15:00:11 +0900,

[#13289] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/22

原です。

[#13290] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/22

At Tue, 22 May 2001 19:02:10 +0900,

[#13291] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/22

原です。

[#13293] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/22

At Tue, 22 May 2001 20:57:02 +0900,

[#13305] Re: Enumerator -- Round 2 — Shin-ichiro HARA <sinara@...> 2001/05/24

原です。

[#13322] Re: Enumerator -- Round 2 — "Akinori MUSHA" <knu@...> 2001/05/24

At Thu, 24 May 2001 15:44:14 +0900,

[#13277] ext/dbm in ruby 1.7 — Kazuhiro NISHIYAMA <zn@...>

ruby 1.7のext/dbmですが、

16 messages 2001/05/21
[#13280] Re: ext/dbm in ruby 1.7 — matz@... (Yukihiro Matsumoto) 2001/05/21

まつもと ゆきひろです

[#13292] Integer("X") rescue -1 が parse error — YASUI Kentarow <kenyasui@...>

安井です。

18 messages 2001/05/22
[#13294] Re: Integer("X") rescue -1 が parse error — matz@... (Yukihiro Matsumoto) 2001/05/22

まつもと ゆきひろです

[#13295] Re: Integer("X") rescue -1 が parse error — "Akinori MUSHA" <knu@...> 2001/05/23

At Wed, 23 May 2001 08:59:50 +0900,

[#13300] 1.6.4 preview3 (Re: Re: Integer("X") rescue -1 が parse error) — matz@... (Yukihiro Matsumoto) 2001/05/24

[#13304] Re: 1.6.4 preview3 (Re: Re: Integer("X") rescue -1 が parse error) — "Akinori MUSHA" <knu@...> 2001/05/24

At Thu, 24 May 2001 14:15:04 +0900,

[#13428] mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

19 messages 2001/05/31
[#13435] Re: mswin32/ming32 system patch (experimental) — nobu.nakada@... 2001/06/01

なかだです。

[#13442] Re: mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...> 2001/06/01

こんにちは、なかむら(う)です。

[#13446] Re: mswin32/ming32 system patch (experimental) — "U.Nakamura" <usa@...> 2001/06/02

こんにちは、なかむら(う)です。

[#13450] Re: mswin32/ming32 system patch (experimental) — nobu.nakada@... 2001/06/04

なかだです。

[ruby-dev:13194] Re: SizedQueue#max=

From: "Akinori MUSHA" <knu@...>
Date: 2001-05-14 17:42:07 UTC
List: ruby-dev #13194
 Queue/SizedQueue 絡みでもう一つ。

 Thread.critical = false の直後の t.run if t ですが、その行間で
t が終了した場合、死んだスレッドを run しようとして ThreadError に
なってしまいます。begin 〜 rescue ThreadError; end で括る必要が
あるのではないでしょうか。

 咳さんによって [ruby-dev:9445], [ruby-dev:9460] の指摘があり、
一度は直ったみたいですが、再度 t.run if t を追加したことで再び
エンバグしてしまったようです。

 CVS によれば 2000/5/1 にその変更があったみたいですが、 ChangeLog
には言及がないようです。この t.run の意図って何でしたっけ?



 ruby_1_6 用のパッチを付けます。(他のスレッドで出た修正も込み..)

-- 
                     /
                    /__  __            Akinori.org / MUSHA.org
                   / )  )  ) )  /     FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ /  ( (__(  @ iDaemons.org / and.or.jp

"Freeze this moment a little bit longer, make each impression
  a little bit stronger..  Experience slips away -- Time stand still"

Index: lib/thread.rb
===================================================================
RCS file: /src/ruby/lib/thread.rb,v
retrieving revision 1.9.2.1
diff -u -r1.9.2.1 thread.rb
--- lib/thread.rb	2001/03/14 04:45:46	1.9.2.1
+++ lib/thread.rb	2001/05/14 17:18:23
@@ -74,7 +74,10 @@
       retry
     end
     Thread.critical = false
-    t.run if t
+    begin
+      t.run if t
+    rescue ThreadError
+    end
     self
   end
 
@@ -160,7 +163,10 @@
     ensure
       Thread.critical = false
     end
-    t.run if t
+    begin
+      t.run if t
+    rescue ThreadError
+    end
   end
   def enq(obj)
     push(obj)
@@ -170,7 +176,7 @@
     Thread.critical = true
     begin
       loop do
-	if @que.length == 0
+	if @que.empty?
 	  if non_block
 	    raise ThreadError, "queue empty"
 	  end
@@ -190,7 +196,7 @@
   alias deq shift
 
   def empty?
-    @que.length == 0
+    @que.empty?
   end
 
   def clear
@@ -223,7 +229,7 @@
 
   def max=(max)
     Thread.critical = true
-    if max >= @max
+    if max <= @max
       @max = max
       Thread.critical = false
     else
@@ -253,6 +259,7 @@
   end
 
   def pop(*args)
+    ret = super
     Thread.critical = true
     if @que.length < @max
       begin
@@ -263,9 +270,12 @@
       ensure
 	Thread.critical = false
       end
-      t.run if t
+      begin
+	t.run if t
+      rescue ThreadError
+      end
     end
-    super
+    ret
   end
 
   def num_waiting

In This Thread