今日もメモリ管理周辺の不具合修正やチューニングがありました。また 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 チップで動いている NetBSD で DreamCast などのプラットフォームだそうです。DreamCast で Ruby が動く! 正確にはビルドできるというだけで動くかどうかはわからないそうですけど)向けのクロスコンパイル時のビルドエラーを修正するための変更だそうです。
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 のデバッグ用にコンパイルしようとすると最近のメモリ管理関係の構造体などの名称変更に追随できていない部分があったのを修正しています。