Bug #9881
closedstuck in test/openssl/test_ssl.rb on Windows
Description
r46223以降、WindowsにおいてOpenSSL::TestSSL#test_verify_resultで刺さってしまうようになりました。
(CI等で確認できます)
調べてみたところ、この変更時に追加された、
ssl.sync_close = true
の1行が問題のようです。
よくわからないのですが、他のテストメソッドはこれがあっても問題ありません。
意味がわかってないので私にはなんとも言えないのですが、何かわかりますでしょうか?
Updated by akr (Akira Tanaka) over 10 years ago
まず ssl.sync_close = true の意味は、
ssl.close としたときに ssl に入っている
IO も同時に close するようにする、という意味です。
これがないと、test_verify_result で
sock = TCPSocket.new("127.0.0.1", port) として作ったソケットを close し忘れることになります。
close するようにしたら刺さるようになるというのは
ちょっと原因が想像しがたいのですが、
とりあえず刺さっているのはどこでしょうか。
刺さっている場所は ssl.sync_close = true そのものじゃなくて、それよりも後ではないかと思うのですが。
あと思いつくこととしては、test_verify_result は 3つのテストが入っている感じなので、
メソッドを 3つに分けてみるとかでしょうか。
それも含め、再現スクリプトを最小化してみるというのはどうでしょうか。
Updated by usa (Usaku NAKAMURA) over 10 years ago
Akira Tanaka wrote:
close するようにしたら刺さるようになるというのは
ちょっと原因が想像しがたいのですが、
とりあえず刺さっているのはどこでしょうか。刺さっている場所は ssl.sync_close = true そのものじゃなくて、それよりも後ではないかと思うのですが。
はい、2回目の ssl.connect (266行目) です。
あと思いつくこととしては、test_verify_result は 3つのテストが入っている感じなので、
メソッドを 3つに分けてみるとかでしょうか。
それも含め、再現スクリプトを最小化してみるというのはどうでしょうか。
なるほど。
というわけで、今作業途中なのですが、247行目の ssl.sync_close = true があると266行目で刺さる
(249行目でなく)ということがわかったので、なんだか不穏な感じです。
ちょっと出かけないといけないのでまだ途中ですが、また新しいことがわかったら報告します。
Updated by usa (Usaku NAKAMURA) over 10 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
Applied in changeset r46325.
- test/openssl/test_ssl.rb (OpenSSL::TestSSL#test_verify_result):
shouldn't use same server for respective tests, because the 1st
test sometimes kills the server main loop silently.
[Bug #9881] [ruby-dev:48266]