From: Shugo Maeda Date: 2008-05-21T18:04:45+09:00 Subject: [ruby-dev:34790] Re: net/imap uses Thread#raise 前田です。 2008/05/19 0:21 Tanaka Akira : > で、思うのですが、まずそもそも Thread#raise を使うのはよろし > くありません。しばらく前に、[ruby-talk:292398] で始まるスレッ > ドがあり、私も何通か書きましたが、どのタイミングで起こるかわ > からない例外は対処が困難だと思います。もしうまく対処できると > いうのであれば、ぜひ方法を教えてください。 > > 私としては、Thread#raise を使うのは止めて、例外はそのままス > レッドを終了させるようにし、disconnect あたりで join するこ > とによりクライアント側に例外を移すのが良いのではないかと思い > ます。 現状の問題についてはおっしゃる通りだと思いますが、上記の対応では不十分な 気がします。 リクエストを発行したスレッドがレスポンス待ちになっている時に、受信スレッド で例外が発生したとすると、上記の対応ではリクエストを発行したスレッド がブロックしてしまう(のでdisconnectまで行かない)のではないかと思います。 例外の発生をThread#raiseではなく@response_arrival.broadcastで 通知すると上手く行くのではないかと思いますが、ちょっと修正に時間がかかりそうです。 他に影響があるので、とりあえずテストをスキップするようにした方がよいでしょうか。 # 修正するのを忘れそうなのでRedmineにチケットを登録しておきたいところですが、 # もう使えるんですっけ。 -- Shugo Maeda