ruby-trunk-changes r48347 - r48363

今日は webrick の shutdown 方法の小さな修正や rdoc, rubygems の更新、Windows 版の pipe の nonblock mode の対応などがありました。

akr: r48347 2014-11-09 23:01:20 +0900

webrick のテストで with_http にログのチェックの内容を lambda で渡すようにリファクタリングしています。

nobu: r48348 2014-11-09 23:25:52 +0900

define_method にブロックを渡して定義されたメソッドで super を呼べるようにしている、とのことですがテストが拡張ライブラリだけで、これを呼ぶテストスクリプトがないみたいですね。
vm_yield_with_cfunc() の引数に defined_class を追加してメソッドの定義元クラスを渡して control frame に積めるようにしています。

nobu: r48349 2014-11-09 23:33:19 +0900

r48348 の続きでテスト用の拡張ライブラリを利用するテストスクリプトを追加しています。複雑ですが、C の関数で rb_proc_new() で作られたブロックを Module#define_method に渡して定義されたメソッドが、ブロック内で rb_call_super() で super を呼び出した時に、メソッドを定義されたクラス/モジュールの継承ツリー内で super を探索できるようになっています。 [ruby-core:64713] [Feature #10195]

nobu: r48350 2014-11-09 23:58:33 +0900

r48348 および r48349 の続き。テストケースにさらに定義されたメソッドにブロックが渡された時に C で定義された関数からブロックが呼ばれることを確認しています。 [ruby-core:64713] [Feature #10195]

akr: r48351 2014-11-10 05:58:22 +0900

test/webrick/webrick.cgi と test/webrick/webrick_long_filename.cgishebangruby のオプション -d が渡されていたのを削除しています。 .cgi! こんなファイルがあったんですね。更新履歴をみると前の変更が2005年とか2008年とかです。

svn: r48352 2014-11-10 05:58:37 +0900

version.h の日付更新。

akr: r48353 2014-11-10 08:03:40 +0900

標準添付ライブラリ webrickWEBrick::GenericServer#initialize で shutdown の通知用の pipe を初期化する位置を前のほうに移動して race condition を防いでいます。また後始末の処理を別メソッドに切り出しています。

akr: r48354 2014-11-10 12:20:06 +0900

標準添付ライブラリ webrick で shutdown 通知用 pipe に通知するために write_nonblock で書き込むのではなくて、close することで通知するようにしています。 Windows 版で write_nonblock が使えなかったとのこと。

akr: r48355 2014-11-10 12:46:22 +0900

標準添付ライブラリ webrick の lib/webrick/server.rb で shutdown 通知用 pipe を read 用と write 用それぞれインスタンス変数に格納していたのをまとめて配列に入れて1つのインスタンス変数に持つように変更しています。

hsbt: r48356 2014-11-10 14:59:34 +0900

標準添付ライブラリ rdoc を 4.2.0.alpha に更新しています。 darkfish のテンプレートの RDoc プロジェクトページを rubyforge.org から docs.seattlerb.org のサイトへ変更しているのと、あとなぜか lib/rdoc/known_classes.rb に rb_mDL が追加されています。 DL の削除と関係しているのでしょうか(でも削除されたんだけど…)。

nobu: r48357 2014-11-10 15:56:41 +0900

template/unicode_norm_gen.tmpl で Unicode 用のデータファイルの生成時にバージョン番号を生成先のディレクトリ名から取得して UnicodeNormalize::UNICODE_VERSION に定義するようにしています。

nobu: r48358 2014-11-10 16:09:45 +0900

Signal.kill の rdoc 用コメントに、シグナルの種類は Signal.list を見るように追記しています。 [ruby-core:66162] [Bug #10492]

hsbt: r48359 2014-11-10 16:20:48 +0900

標準添付されている RubyGems を master(3e36528) に更新しています。コメントの typo 修正やクラスの再定義回避(なぜこれが必要なのかはよくわかりませんが)など小さな変更のみです。

nobu: r48360 2014-11-10 17:24:36 +0900

拡張ライブラリ etc の Etc.getlogin で返すログインユーザ名を Windows 版の時にエンコーディングを正しく変換するように修正しています。 [ruby-core:66163] [Bug #10493]

usa: r48361 2014-11-10 19:42:19 +0900

Windows 版の pipe の実装で nonblock mode での読み書きの挙動を実装しています。 これまで Windows では skip されていた pipe の read_nonblock や write_nonblock のテストも skip しないようにしています。

akr: r48362 2014-11-10 20:05:00 +0900

標準添付ライブラリ webrickWEBrick::GenericServer で @shutdown_pipe の初期化は initialize 時ではなくて listen 時に行うようにしています。テストをみたところ、WEBrick::GenericServer を一度 shutdown して、再度 listen でサーバとして起動した時に動作するようにしているようです。

usa: r48363 2014-11-10 20:21:42 +0900

r48361 の Windows 版 pipe の write_nonblock の追加修正。 pipe に書き込めなかったけど、エラーにもならなかった、という時に半分のサイズで再度挑戦するようにしています。多分バッファサイズ以上の size が WriteFile() に指定されると一部分だけ書き込まれるのではなくて全体が書き込めずにかえってくるんですね。 Unix (POSIX?) の挙動をエミュレートするためにここで吸収しているというわけですね。