ruby-trunk-changes r46320 - r46341

今日は標準添付ライブラリ Net::IMAP の修正、RGenGC の世代別オブジェクト数カウントの修正などがありました。

zzak: r46320 2014-06-03 01:38:31 +0900

README.EXT に rb_call_super() についての説明を追記しています。うーん、これわたしにとってはちょっと英文が難しいというかあいまいな気がしますね。 https://github.com/ruby/ruby/pull/623

svn: r46321 2014-06-03 01:38:42 +0900

version.h の日付更新。

nobu: r46322 2014-06-03 05:23:47 +0900

r46309 で rb_encoding * に const をつけた変更は、そもそも rb_encoding の typedef の段階で const を付加するようにしています。うーんこれは C API の非互換になりそうですね。バイナリには影響ないでしょうけど。

nobu: r46323 2014-06-03 05:23:52 +0900

include/ruby/encoding.h から encindex (Encoding を表す整数のインデックス)の内容をチェックするためのマクロなどを encoding.c に移動しています。

usa: r46324 2014-06-03 07:35:17 +0900

r46323 の encindex の遮蔽に win32/win32.c でも追随して ENC_TO_ENCINDEX() を使っていたのを rb_enc_to_index() を呼ぶように変更しています。ついでに重大な変更をするときは ChangeLog を書けよとコミットログで釘を刺しています。

usa: r46325 2014-06-03 09:48:29 +0900

r46223 で拡張ライブラリ openssl の OpenSSL::SSL::SSLSocket のテストの変更で Windows でテストが停止してしまうようになったとのことで、テストメソッドを分解してサーバを使いまわさないようにしています。 [ruby-dev:48266] [Bug #9881]

ko1: r46326 2014-06-03 12:29:12 +0900

test/ruby/memory_status.rb で fiddle/import がない時に envutil.rb を読みこむときに test/unit が require できるように $LOAD_PATH を調整しています。ここにきてる時点で test/unit はロードされてるのでは? と一瞬思いましたが memory_status.rb はメモリリークチェックのために子プロセスで読み込まれるものなので test/unit がない場合があるんですね。
あと直前の r46325 の ChangeLog エントリのところに不要な "o" が追加されてしまっていますね。

ko1: r46327 2014-06-03 12:55:04 +0900

RGenGC の世代毎のオブジェクト数カウントの漏れを修正しているようです。そのため RVALUE_DEMOTE_FROM_YOUNG() と RVALUE_DEMOTE_FROM_OLD() の引数に rb_objspace を追加しています。
ついでに if のブロックに brace なしのだったところを brace で囲むようにするなどスタイルの変更。

ko1: r46328 2014-06-03 13:00:18 +0900

RGenGC のデバッグ用のチェックで rb_bug() で異常終了させる時のエラーメッセージの修正。

ko1: r46329 2014-06-03 13:03:55 +0900

obj_free() のスタイルの変更のみ。

ko1: r46330 2014-06-03 13:19:21 +0900

objspace_live_slot() から heap_pages_final_slots のぶんを減らすように修正しています。 finalizer が実行されるまでは live でもないし free でもない状態というわけですね。

shugo: r46331 2014-06-03 13:19:57 +0900

標準添付ライブラリ net/imapGMail 対応で "MIXED" という body type に対応しているそうです。 [ruby-core:62864] [Bug #9885] https://github.com/ruby/ruby/pull/622

ko1: r46332 2014-06-03 16:37:44 +0900

gc.c の rb_gc_force_recycle() でオブジェクトが old かどうかの判定結果を RVALUE_OLD_P() を int 型の変数に代入していたのを論理式にして代入するようにしています。 RVALUE_OLD_P() が VALUE 型なので clang がビルドエラーになっていたのを回避するためだそうです。

nobu: r46333 2014-06-03 16:44:17 +0900

r46326 で入れた ChangeLog の不要な文字と、r46331 の ChangeLog エントリの行末の空白の削除。

nobu: r46334 2014-06-03 16:44:19 +0900

多分 r46332 の変更に関連してだと思いますが gc.c の RVALUE_INFANT_P(), RVALUE_OLD_P() などの世代を判定する inline 関数の戻り値を int に変更しています。そもそも真偽値を返してるのに VALUE だったのがおかしかったので関数の型のほうを変更しようということですね。

ko1: r46335 2014-06-03 16:50:23 +0900

RGENGC_CHECK_MODE が 2以上に定義された時に RGenGC の各世代のオブジェクト数カウンタが正しく管理されているかをチェックするようにしています。

ko1: r46336 2014-06-03 18:00:53 +0900

RGenGC の young オブジェクトの数のカウントの方法を変更しています。 GC の開始時にリセットして infant からの promote でカウントアップするようにしています。 young から old への promote は当然(生き残っているオブジェクトは)全て old に変化するので、そのぶんの減算を真面目にカウントする必要はなかった、ということでしょうか。

ko1: r46337 2014-06-03 18:02:21 +0900

rb_gc_call_finalizer_at_exit() で RGENGC_CHECK_MODE が2以上に定義されている時に gc_verify_internal_consistency() を呼ぶようにしています。

ko1: r46338 2014-06-03 18:13:39 +0900

r46332 の変更は r46334 で RVALUE_OLD_P() 自体の型を int に変更したことで不要になったので revert しています。

ko1: r46339 2014-06-03 18:47:54 +0900

test/ruby/test_gc.rb の test_latest_gc_info で GC.last_gc_info[:gc_by] のチェックのためにオブジェクトを生成する回数を GC.stat(:heap_free_slot) で取得していたのを、さらに heap_increment で page サイズが拡張されるのも考慮して増やしています。

ko1: r46340 2014-06-03 19:17:18 +0900

rb_objspace_free() で rest_sweep() を呼んでいたのを削除しています。既にメモリ管理に関わる構造体が解放されているので呼んではいけなかったとのこと。うーん、これは 2.0.0/2.1 でも同様なんでしょうか?

akr: r46341 2014-06-03 23:33:51 +0900

load_file_internal() のうちファイルを開いた後の内容を load_file_internal2() に切り出して rb_protect() で保護して、例外など大域脱出が発生した時の開いたファイルの閉じ漏れを修正しています。