ruby-trunk-changes r43421 - r43434

今日もメモリ管理周辺の不具合修正やチューニングがありました。また open-uri の互換性のための修正がありました。

ko1:r43421 2013-10-26 04:09:14 +0900

メモリ管理の freelist の gc_before_heap_sweep() での操作で rb_heap_t::using_page::freelist を rb_heap_t::freelist で上書きしていたところで、rb_heap_t::using_page::freelist がこの時点で空リストでない可能性があった(rb_heap_t::freelist に属しているオブジェクトに対する rb_gc_force_recycle() が呼ばれた場合)ので、それを消してしまわないように末尾に追加するようにしています。オブジェクトがリークする可能性があったみたいですね。

svn:r43422 2013-10-26 04:09:19 +0900

version.h の日付更新。

tarui:r43423 2013-10-26 06:37:39 +0900

r43421 の gc_before_heap_sweep() でのリスト末尾に追加するコードをリファクタリングしています。スッキリしましたね。

ko1:r43424 2013-10-26 11:34:23 +0900

vm_malloc_increase() で malloc() によるメモリ確保の容量が増えてきたために GC を実行する時に gc_rest_sweep() で Lazy Sweep で途中の sweep 処理を完了させて空き容量を作ってから再度チェックするようにしています。Lazy Sweep では解放できる予定だけどまだ free() されないメモリ領域が存在するので、本来なら不要な GC が発生しやすくなっていたのでそれを防ぐためでしょう。

ko1:r43425 2013-10-26 11:46:30 +0900

GC のパラメータの GC_MALLOC_LIMIT を 8MB -> 16MB、GC_MALLOC_LIMIT_GROWTH_FACTOR を 1.8 -> 2.0 へ、malloc_limit の現象率を 1/4 から 1/10 に変更しています。mallco() の容量を増えやすく、あまり急激に減らないように調整しているみたいですね。これも GC 回数の抑制のためかなと思います。

akr:r43426 2013-10-26 12:04:27 +0900

addr2line.c で ELF フォーマット用のヘッダ elf.h もしくは elf_abi.h の #include をシステムヘッダ(特に sys/types.h が問題らしいです)の後に #include するように位置を移動しています。これは NetBSD/sh3 (SH3 チップで動いている NetBSDDreamCast などのプラットフォームだそうです。DreamCastRuby が動く! 正確にはビルドできるというだけで動くかどうかはわからないそうですけど)向けのクロスコンパイル時のビルドエラーを修正するための変更だそうです。

ko1:r43427 2013-10-26 13:31:10 +0900

GC のプロファイル用のタイマー操作関数の呼び出しのうち Lazy Sweep の時だけ有効なものが GC_ENABLE_LAZY_SWEEP マクロのチェックなしに書かれているところがあったので、無効の時もコンパイルできるように修正しています。

ko1:r43428 2013-10-26 14:35:43 +0900

gc_profile_dump_on() で GC のプロファイル情報を出力するときに最近変更したメモリ管理の構造の名称にあわせて "Use Slot" -> "Use Page" とヘッダの文字列を修正しています。

akr:r43430 2013-10-26 17:49:58 +0900

標準添付ライブラリ open-uri の r40207 で IO#meta でヘッダの情報を取り出す時の同じ種類のヘッダが複数あった時の取り扱いを修正した時に OpenURI::Meta#meta_add_field というメソッドを削除してしまっていたのを互換性のために復活させています。 [ruby-core:58017] [Bug #9051]

nobu:r43431 2013-10-26 19:07:11 +0900

signal.c のインデント修正のみ。

nobu:r43432 2013-10-26 19:07:13 +0900

テスト用のユーティリティ test/ruby/envutil.rb の assert_separately で子プロセスを起動する時のオプションに常に --disable=gems を付加するようにしています。 test-unit.gem があったときにそちらを読み込んでしまわないようにしているそうです。

nobu:r43433 2013-10-26 19:08:02 +0900

Range オブジェクトに __send__ や instance_eval を使って initialize_copy を呼んで無理矢理再初期化するのを NameError を発生させてエラーにするようにしています。

ktsj:r43434 2013-10-26 19:42:07 +0900

GC_DEBUG と RGENGC_CHECK_MODE というマクロを有効化させて GCデバッグ用にコンパイルしようとすると最近のメモリ管理関係の構造体などの名称変更に追随できていない部分があったのを修正しています。