ruby-trunk-changes r51016 - r51031

今日は GC のマーク漏れの修正や Solaris ではデッドロック回避のため vfork(2) の利用をやめるという変更などがありました。

normal: r51016 2015-06-25 02:44:01 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLSockt#sysread で nonblock モードではない時にはキーワード引数を受け付けず ArgumentError にするようにしています。

svn: r51017 2015-06-25 02:44:20 +0900

version.h の日付更新。

ko1: r51018 2015-06-25 03:38:36 +0900

r51010 で mark_ptr() に追加した GC のチェックに参照元オブジェクトの情報も出力させるようにしています。 また r51012 で追加したチェックは削除しています。 また RGENGC_OBJ_INFO というマクロを導入して、デフォルトでは RGENGC_DEBUG か RGENGC_CHECK_MODE が非0に設定されたら on になるようにしておいて、とりあえず常に 1 に定義するようにしています。 [ruby-dev:49049] [Bug #11244]

ko1: r51019 2015-06-25 06:44:58 +0900

rb_method_definition_reset() で method entry をリセットする時に def->type が VM_METHOD_TYPE_ATTRSET の時も def->body.attr.location で初期化するようにしています。コミットメッセージによるとどっちかというと初期化がどうというより Write Barrier の挿入が主眼っぽいですね。

ko1: r51020 2015-06-25 06:53:07 +0900

デバッグ用関数 obj_info() で T_IMEMO 型のオブジェクト で method entry 用の時の表示に alias の情報も追加しています。

ko1: r51021 2015-06-25 07:10:13 +0900

r51020 に続いて obj_info() の T_IMEMO の method entry 用の時の出力にメソッド定義のタイプ(rb_method_type_t)を文字列化して含めるようにしています。

nobu: r51022 2015-06-25 14:14:18 +0900

test/test_prime.rb でインデントに tab を使っていたところを空白に展開しています。 https://github.com/ruby/ruby/pull/944

nobu: r51023 2015-06-25 14:26:31 +0900

test/test_prime.rb, test/test_securerandom.rb, test_test_tracer.rb などで適切な assertion メソッドを使うようにするリファクタリング

nobu: r51024 2015-06-25 15:32:23 +0900

fill_random_bytes() の Windows 版の実装で ATOMIC_PTR_CAS() を使った排他処理で競合があったかどうかの分岐を先にするようにリファクタリングしています。

nobu: r51025 2015-06-25 16:11:45 +0900

メソッドがみつからない時に NoMethodError を発生させる時に NameError 内の "message" という定数(通常定数は大文字で始まるので、これはインタプリタ内部でしか参照できない)からクラスを取得してメソッド呼び出ししていたのを、直接 rb_name_err_mesg_new() を呼ぶように変更しています。

ko1: r51026 2015-06-25 16:59:23 +0900

rb_method_entry_t と rb_method_definition_t の作成順序をいれかえています。 me->def の方向に参照されているのでこれまで def を作ってから me を作るという順序になっていましたが、mark 処理が rb_method_entry_t の mark 関数で def 経由のオブジェクトもマークしていて、def を作った後 me ができる前にオブジェクトが mark されないタイミングがあったようです。 rb_method_entry_make() の中で rb_method_entry_create() も呼び出してメモリ確保するようにしています。 また mark_method_entry() で def が NULL のケースに対応するようにしています。 [ruby-dev:49049] [Bug #11244]

ko1: r51027 2015-06-25 17:37:27 +0900

r51026 の続き、かな? method_definition_reset() の引数から rb_method_definition_t * を削除して、me->def にセットするのを省くリファクタリング? なんかちょっとよくわからないです。

ngoto: r51028 2015-06-25 18:35:46 +0900

テスト用のユーティリティ test/lib/envutil.rb の assert_no_memory_leak で Solaris 用に子プロセスに渡す環境変数とオプションを指定する定数 NO_MEMORY_LEAK_ENVS を作っていたのを test/lib/memory_status.rb に移動しています。 ここでチェックのために EnvUtil.invoke_ruby が呼ばれているので、余分な実行を抑えるためみたいですね。

ngoto: r51029 2015-06-25 19:42:37 +0900

r50977 の Solaris での execv(3) 廃止と同様に Solaris でのデッドロック対策として Solaris では vfork(2) を使わず fork(2) を利用するようにしています。 Solaris での vfork(2) は MT Unsafe なのだそうです。 [ruby-dev:49089] [Bug #11265]

ngoto: r51030 2015-06-25 21:42:07 +0900

r51029 で修正した Solaris でのデッドロックの修正の確認のためのテストを追加しています。 dlsym(3) を呼び出すため拡張ライブラリを用いたテストになっています。 [ruby-dev:49089] [Bug #11265]

svn: r51031 2015-06-25 21:43:13 +0900

r51030 で新規追加されたファイルの svn property 設定。