From: sinara@... Date: 1997-02-25T21:48:33+09:00 Subject: [ruby-list:2261] Re: [BUG]Thread#fail (Re: bug? fail ) 原です。 レポートの続きです。次のコードを動かすと、 -----^ test.rb #!/usr/local/bin/ruby class TimeoutError < Exception end def timeout(sec, msg = "timeout!!!") begin x = Thread.current y = Thread.start { sleep sec x.raise TimeoutError, msg if x.status } yield ensure Thread.kill y if y.status end end def re_try(times, error) i = 1 begin yield(i) rescue error if i < times i += 1 retry end end end for k in 1..10 Thread.start { re_try(30, TimeoutError) { |i| print i, "\n" timeout(2) { sleep 3 } } } end sleep 61 -----$ test.rb 数秒(不定)の後に ./test.rb:13:in `timeout': undefined method `status' for nil from ./test.rb:33 from ./test.rb:34:in `re_try' from ./test.rb:31 from ./test.rb:35:in `start' from ./test.rb:30 from ./test.rb:36:in `each' from ./test.rb:36 というのが出ます。再現性あり。 あと、これはちょっと怪しいんですが一度、起動後数秒して TimeoutError が起こりました。こっちは再現しません。ただ し、他のスクリプトでは度々起こっている様に見えます。悩 ませているのはこっちの方なんですが、もう少し調査します。