今日は主に webrick の修正がありました。
nobu: r51231 2015-07-14 11:20:16 +0900
標準添付ライブラリ webrick で WEBrick::GenericServer#shutdown では Thread を止めるための pipe の close をしていたのですが、WEBrick::GenericServer#stop でも同じ pipe に対して書き込みをして start の Thread を止めるようにしています。 read_nonblock で読み込みサイズを nread か 8 の大きいほうとしていますが、これはなんだろう。書くほうは 1 byte だけ書いてるみたいなのですが…。
nobu: r51232 2015-07-14 11:20:34 +0900
WEBrick のテストの do_test_timeout が大きなひとつのテストメソッドになっていたのを細かく分割しています。
svn: r51233 2015-07-14 11:20:39 +0900
version.h の日付更新。
nobu: r51234 2015-07-14 11:21:53 +0900
標準添付ライブラリ webrick の WEBrick::Utils::TimeoutHandler で 0.5 秒おきにタイマー用の Thread が起きてタイムアウトしている Thread がないかチェックをしていましたが、次に起こすべき Thread が存在する時刻まで(なければ引数なしの sleep で無期限に)眠るようにしています。 sleep 中に WEBrick::Utils::TimeoutHandler#register で追加された条件が反映されないのでは、と思いましたがそれは次の r51235 で対応されてました。
nobu: r51235 2015-07-14 11:22:51 +0900
r51234 の WEBrick::Utils::TimeoutHandler の変更で #register で登録してもタイマー用の Thread が起きないので機能しなくなっていたので、#register でこの Thread の #wakeup を呼んで起こして機能するように修正しています。
nobu: r51236 2015-07-14 11:34:53 +0900
r51224 での標準添付ライブラリ timeout の定数の private_constant の指定で *%I[...] の表記を使ったのが "*" がメソッドか引数の展開かで曖昧なので -w をつけると警告が出ていたので普通に Symbol リテラルを並べるように修正しています。
nobu: r51237 2015-07-14 13:55:03 +0900
webrick のテストで assert_expired という assertion が引数にタイムアウトが発生したかどうかの判定を渡すようになっていたのを、タイムアウトが発生しているべきかどうかでメソッドごと分けるようにしています。 また WEBrick::Utils::TimeoutHandler のインスタンス変数をチェックするところで Thread.handle_interrupt で例外の割り込みを抑制しています。 assert_not_expired のチェック中に割り込みが飛んだのは無視するようにするのと、WEBrick::Utils::TimeoutHandler.timeout をネストさせたテストがあるのでそのためというのもあるかも。
nobu: r51238 2015-07-14 13:55:13 +0900
標準添付ライブラリ WEBrick::HTTPServlet::DefaultFileHandler のテストで Windows 上で :DocumentRoot に指定するパスが UNC path ("\\" ではじまる)だと失敗していたので Dir.chdir で移動するのをやめて dir コマンドにフルパスで渡して short file name を取得するように修正しています。
nobu: r51239 2015-07-14 17:13:18 +0900
win32/rtname.cmd という Windows で利用する DLL を検出する cmd スクリプトをリファクタリングしています。呪文めいていますね。