[Momonga-devel.ja:01369] Re: OmoiKondaraでのTimeout
- From: Kenta MURATA <muraken2@xxxxxxxxx>
- Date: Sat, 08 Feb 2003 23:25:17 +0900
むらけんです.
In message <20030208220038.84AA.CIPHER@xxxxxxxxxxxxxxxx> at Sat, 08 Feb 2003 22:03:01 +0900,
Akira Shibata <cipher@xxxxxxxxxxxxxxxx> wrote:
> ruby系のエラーだからあまり疑わなかったのですが。
OmoiKondara のコード (特に 200 行辺り) を良く見てください.
timeout (sec) do
r = gets
end
この部分です.zunda さんが gcc_2_96 を無事パッケージングできる
ようにするために施した修正です.
そして,併わせて timeout.rb を見てください.timeout.rb は ruby
に標準添付のライブラリです.
x = Thread.current
y = Thread.start {
sleep sec
x.raise TimeoutError, "execution expired" if x.alive?
}
yield sec
こうなってますよね.
要するに,r = gets を実行しているスレッドで gets が60秒間の間
うんともすんとも言わなかったら,別のスレッドが gets を待ってい
るスレッドに例外を投げるんです.
しかし
In message <20030208002432.6E0C.CIPHER@xxxxxxxxxxxxxxxx> at Sat, 08 Feb 2003 00:35:32 +0900,
Akira Shibata <cipher@xxxxxxxxxxxxxxxx> wrote:
> PollVec::Block: BUG - deadlock detected
> Pol../tools/OmoiKondara:201:in `gets': Interrupt
これは意図した例外ではないのですが,理由はだいたいわかるでしょ
う.gets でファイルデスクリプタから入力待ちしている状態で,シ
グナルが発生したんです.
なので,BUG と出ていますが,Ruby 側のバグでは無いと考えられます.
--
1024D/2A3FDBE6 2001-08-26 Kenta MURATA (MURAKEN) <muraken2@xxxxxxxxx>
Key fingerprint = 622A 61D3 280F 4991 4833 5724 8E2D C5E1 2A3F DBE6