ruby-trunk-changes r43364 - r43373

今日は RubyGems が毎回全ての gems パッケージの拡張ライブラリを再ビルドしてしまう不具合の修正や、IO#sysopen の不具合修正などがありました。

nobu:r43364 2013-10-19 21:00:41 +0900

template/encdb.h.tmpl の未使用になっていたマクロ ENCINDEX() の定義を削除しています。

tmm1:r43365 2013-10-20 04:21:05 +0900

クラス名を取得する rb_class2name() で rb_class_name() を呼んでいたのを rb_tmp_class_path() を直接呼ぶようにして不要な文字列オブジェクトの複製を抑制するようにしています。

svn:r43366 2013-10-20 04:21:09 +0900

version.h の日付更新。

nobu:r43367 2013-10-20 05:24:30 +0900

r43365 の再修正。 rb_class2name() は特異クラスや Module の include で使われる IClass ではなくて Class だけ認識するように rb_class_real() を呼び出しています。

drbrain:r43368 2013-10-20 09:31:12 +0900

RubyGems の最新版(master ブランチの 3de7e0f)への更新。拡張ライブラリを含む gem パッケージの再ビルドを抑制して毎回リビルドされていたのを修正しています。また依存関係のソルバが解決に失敗した時に異常終了する不具合の修正。

drbrain:r43369 2013-10-20 10:33:19 +0900

更に RubyGems の更新(master ブランチの 0886307)。rdoc ドキュメントと :nodoc: タグの追加です。これで 75% の rdoc coverage になるそうです。

nobu:r43370 2013-10-20 13:58:49 +0900

include/ruby/ruby.h の RGenGC 用の inline 関数 rb_obj_wb_unprotect(), rb_obj_written(), rb_obj_write() の未使用の引数に RB_UNUSED_VAR() マクロをつけて警告を抑制しています。

nobu:r43371 2013-10-20 15:12:16 +0900

internal.h から r43362 の変更で不要になった rb_w32_init_file() のプロトタイプ宣言を削っています。

nobu:r43372 2013-10-20 15:29:06 +0900

errno の値に応じた SystemCallError (Errno::EXXXX) 例外を発生させる rb_sys_fail_path_in() に類似の関数で errno を参照するのではなくて引数でエラー番号を与える rb_syserr_fail_path_in() を追加しています。うーんこの名前どっちがどっちか毎回忘れそうですね。suffix をつけたらいいんじゃないですかね、..._with_errno() とか……ってこれでもどっちが引数に渡すのかわからなくなりそう。

nobu:r43373 2013-10-20 15:41:24 +0900

IO#reopen で先に元々の file descriptor を close(2) してから rb_sysopen() で新たな file descriptor を開いていたのですが、 rb_sysopen() は GVL を解放するため、この間に他のスレッドで Ruby スクリプトが動くことができ、close された fd を持つ中途半端な状態の IO オブジェクトが見えてしまう可能性があったので、まず rb_sysopen() で fd を開いておいてから rb_cloexec_dup2() で fd の入れ替えをしてその後古い fd を close() するように処理の順序を修正しています。よくこんな細かいところに気がつきましたねー。元となるパッチの提供者は数年来こういうコアな部分の不具合報告やパッチの提供をしている Eric Wong さんです。コミッターになるようにすすめているけど本人が断わってるんですよね。 [ruby-core:57943] [Bug #9036]