Bug #3318
closednet/imap/test_imap.rb reports an error on Windows
Description
=begin
imapのテストが以下のようなエラーを出します。
- Error:
test_idle_done_not_during_idle(IMAPTest):
IOError: closed stream
C:/ruby/test/net/imap/test_imap.rb:283:in `test_idle_done_not_during_idle'
以下のパッチで問題は出なくなるんですが、これでいいんでしょうか?
実はsocketレベルに問題がありそうだったりしますか?
Index: lib/net/imap.rb¶
--- lib/net/imap.rb (revision 27889)
+++ lib/net/imap.rb (working copy)
@@ -311,7 +311,7 @@ module Net
@receiver_thread.raise(e)
end
@receiver_thread.join
-
@sock.close
-
end@sock.close unless @sock.closed? raise e if e
=end
Updated by shugo (Shugo Maeda) over 14 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r27903.
Usaku, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end
Updated by shugo (Shugo Maeda) over 14 years ago
=begin
前田です。
2010年5月19日18:22 Usaku NAKAMURA redmine@ruby-lang.org:
imapのテストが以下のようなエラーを出します。
- Error:
test_idle_done_not_during_idle(IMAPTest):
IOError: closed stream
C:/ruby/test/net/imap/test_imap.rb:283:in `test_idle_done_not_during_idle'以下のパッチで問題は出なくなるんですが、これでいいんでしょうか?
r27903で修正してみましたがどうでしょうか。
synchronizeするようにしましたが、closed?をチェックせずにcloseしてIOErrorをrescue¶
した方がよいのかも。¶
実はsocketレベルに問題がありそうだったりしますか?
311行目の
@receiver_thread.raise(e)
あたりを通っている気がするのですが、どんな例外が発生しているか教えて
いただけると何かわかるかもしれません。
--
Shugo Maeda
=end
Updated by usa (Usaku NAKAMURA) over 14 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:41360] Re: [Bug #3318] net/imap/test_imap.rb reports an error on Windows"
on May.19,2010 23:27:37, shugo@ruby-lang.org wrote:
2010年5月19日18:22 Usaku NAKAMURA redmine@ruby-lang.org:
imapのテストが以下のようなエラーを出します。
- Error:
test_idle_done_not_during_idle(IMAPTest):
IOError: closed stream
C:/ruby/test/net/imap/test_imap.rb:283:in `test_idle_done_not_during_idle'以下のパッチで問題は出なくなるんですが、これでいいんでしょうか?
r27903で修正してみましたがどうでしょうか。
synchronizeするようにしましたが、closed?をチェックせずにcloseしてIOErrorをrescue¶
した方がよいのかも。¶
とりあえず、テストの失敗自体はなくなりました。
ありがとうございます。
実はsocketレベルに問題がありそうだったりしますか?
311行目の
@receiver_thread.raise(e)
あたりを通っている気がするのですが、どんな例外が発生しているか教えて
いただけると何かわかるかもしれません。
まだあんまり真面目に追ってないんですが、306行目の
@sock.shutdown
で #<RuntimeError: error> が発生しています。
(で311行目を通っています)
なぜにRuntimeErrorなんでしょう...
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end
Updated by shugo (Shugo Maeda) over 14 years ago
=begin
前田です。
2010年5月20日15:41 U.Nakamura usa@garbagecollect.jp:
r27903で修正してみましたがどうでしょうか。
synchronizeするようにしましたが、closed?をチェックせずにcloseしてIOErrorをrescue¶
した方がよいのかも。¶
とりあえず、テストの失敗自体はなくなりました。
ありがとうございます。
了解です。
実はsocketレベルに問題がありそうだったりしますか?
311行目の
@receiver_thread.raise(e)
あたりを通っている気がするのですが、どんな例外が発生しているか教えて
いただけると何かわかるかもしれません。まだあんまり真面目に追ってないんですが、306行目の
@sock.shutdown
で #<RuntimeError: error> が発生しています。
(で311行目を通っています)
なぜにRuntimeErrorなんでしょう...
test_exception_during_shutdownで
def @sock.shutdown(*args)
super
raise "error"
end
とかしてるんですけど、WindowsだとTCPSocketのインスタンスが使い回され
ていたりとか…ってことはないですよね。
うーん、何でだろう。
--
Shugo Maeda
=end
Updated by usa (Usaku NAKAMURA) over 14 years ago
=begin
こんにちは、なかむら(う)です。
In message "[ruby-dev:41371] Re: [Bug #3318] net/imap/test_imap.rb reports an error on Windows"
on May.20,2010 16:50:31, shugo@ruby-lang.org wrote:
311行目の
@receiver_thread.raise(e)
あたりを通っている気がするのですが、どんな例外が発生しているか教えて
いただけると何かわかるかもしれません。まだあんまり真面目に追ってないんですが、306行目の
@sock.shutdown
で #<RuntimeError: error> が発生しています。
(で311行目を通っています)
なぜにRuntimeErrorなんでしょう...test_exception_during_shutdownで
def @sock.shutdown(*args) super raise "error" end
とかしてるんですけど、WindowsだとTCPSocketのインスタンスが使い回され
ていたりとか…ってことはないですよね。
うーん、何でだろう。
うわ、すみません、間違った出力を見てました orz
まさにそのtest_exception_during_shutdownで期待通りの例外が起
きてるところを間違えて追ってました...
で、改めて、test_idle_done_not_during_idleの方ですが、正常に
期待されるパスを通って、問題の @sock.close にまで辿りついてい
ました。
ではどこでcloseされてるかというと、net/imap.rbの1039行目、
receive_responses内のrescueのところです。
で、そのrescueに入る原因となった例外は1110行目、get_response
で起きてます。
#<Errno::ESHUTDOWN: ソケットが以前のシャットダウンの呼び出しでシャットダウンされているため、データの送受信を要求することは禁じられています。>
いやあwinsockの出すメッセージはわかりやすい¶
というわけで、disconnect内でshutdownを実行した時点では別スレ
ッドのget_responseがまだ実行中であるということになりますが、
このテスト的にそれが正しいかどうかが怪しいということになるん
でしょうかね?
それでは。¶
U.Nakamura usa@garbagecollect.jp
=end