ruby-trunk-changes r34708 - r34723

今日は GC の不具合修正がありました。

usa:r34708 2012-02-20 23:40:01 +0900

enc/depend にエンコーディング用のライブラリとして拡張子 .c のファイルを自動的に利用する依存関係が書かれていましたが mktable.c はユーティリティ用のソースコードなので、これを除外するように修正されています。 [ruby-core:42760] [Bug #6049]

akr:r34709 2012-02-21 00:00:35 +0900

ext/dbm/extconf.rb のコメントの gdbm を大文字表記 GDBM に変更しています。

svn:r34710 2012-02-21 00:00:39 +0900

version.h の日付更新。

nobu:r34711 2012-02-21 00:59:15 +0900

make test で実行される test-sample のエラー結果の表示の前に改行を入れて "...." というプログレス表示の途中に表示されないようにしています。

matz:r34712 2012-02-21 02:59:43 +0900

Enumerable#rewind の rdoc に「ひとつだけ(by one step)巻き戻す」と記述されていましたが、実際は最初まで巻き戻すのでドキュメントを修正しています。 [ruby-core:42767] [Bug #6053]

marcandre:r34715 2012-02-21 09:13:44 +0900

Method#hash, UnboundMethod#hash をその定義に基づいて計算するように実装を追加しています。これにより全く同じメソッド(alias で複製されたメソッドなど)の Method オブジェクトは同じ hash 値を持つようになります。 [ruby-core:42755] [Bug #6048]

nobu:r34716 2012-02-21 14:41:12 +0900

ruby-.pc ファイルに rubylibdir, rubyarchdir, vendordir, vendorarchdir, sitedir, sitearchdir など組み込みのロードパスの記述を追加しています。 [ruby-core:42766] [Feature #6052]

nobu:r34717 2012-02-21 16:08:21 +0900

r34715 で追加した rb_hash_proc が VALUE 型の引数を rb_proc_t のポインタをキャストしたものを受け取るような実装になっていたので GetProcPtr() を使ってちゃんとオブジェクトからポインタを取り出すようにしています。 [Bug #6048]

nari:r34719 2012-02-21 18:35:07 +0900

[ruby-core:42672] で報告されている nokogiri を使った時の GC で解放済みの領域が mark される問題の対応として、マーク用の bitmap をクリアする gc_clear_mark_on_sweep_slots() を削除してそのかわりに rest_sweep() でマーク済みの slot を全て sweep 処理するようにしています。
詳しく現象を確認していないので推測ですが、参照関係のあるオブジェクトのうち一方は回収済みでもう一方が false pointer でマークされてしまい、そこ経由で回収済みのオブジェクトにさわろうとしてしまっていたということでしょうか? この場合だと参照しているほうがちゃんと子をマークしていないのがいけないような気もします。

nari:r34720 2012-02-21 18:41:09 +0900

r34719 で無関係なファイルを変更してしまっていたのを戻しています。

akr:r34721 2012-02-21 19:40:20 +0900

拡張ライブラリ cursesCurses::VERSION の定義に NCURSES_VERSION ではなく curses_version() という関数の返す文字列を利用するように変更しています。

nobu:r34722 2012-02-21 20:22:49 +0900

hash_foreach_iter() の関数のシグネチャをコールバック関数の型に揃えています。

nobu:r34723 2012-02-21 20:23:50 +0900

st_table の objhash タイプの時の hash 関数の実装 rb_any_hash() で Qundef が渡された時は 0 を返すようにしています。