杉浦です。 >>> In Message "[ruby-dev:23783] Re: Thread critical でも timeout を使いたい" >>> <87eko4v271.wl / tempest.nemui.org>, >>> Tatsuki Sugiura <sugi / nemui.org> said; > > |現在のバージョンだと Thread.critical = true の状態で > > |timeout を呼ぶと、呼び出し元スレッドにに制御が戻ってこない > > |ので、必ずタイムアウトしてしまいます。 <Snip...> > > criticalな領域はできるだけ小さくないといけないので、Timeout > > のような長い時間を想定するものを呼んではいけないんじゃないか > > と思います。だから、変更するなら「criticalなら例外」くらいで > > はないでしょうか。 > うーん。なるほど。言われてみればその方が良さそうです。 > 自作のトリッキーなライブラリで必要だったので、どうも > 引きずられてしまいました。 > リクエストは取り下げさせて頂きます。 と書いたのですが、30秒とか待たされるのもちょっと不親切かと思います ので、即座に例外をあげる修正を入れていただけませんか? 1行なので、どなたかコミット可能な方が書いて下さった方が早いとは 思いますが、一応パッチを付けておきます。 # 手書きされるのでしたら、ついでに英語を直して下さると幸い…… -- Tatsuki Sugiura mailto:sugi / nemui.org
--- lib/timeout.rb.orig 2004-06-24 02:58:29.000000000 +0900 +++ lib/timeout.rb 2004-06-26 03:20:54.000000000 +0900 @@ -35,6 +35,7 @@ def timeout(sec, exception=Error) return yield if sec == nil or sec.zero? + raise exception, "timeouted immediately in critical session" if Thread.critical begin x = Thread.current y = Thread.start {