ruby-trunk-changes r43710 - r43726

今日は ObjectSpace.reachable_objects_from_root の不具合修正や RubyGems, RDoc の最新版のマージがありました。

headius:r43710 2013-11-19 04:02:11 +0900

BigMath.log のテストケースを追加しています。

svn:r43711 2013-11-19 04:02:16 +0900

version.h の日付更新。

drbrain:r43712 2013-11-19 05:55:18 +0900

lib/rdoc/rubygems_hook.rb にデバッグ用のメッセージ出力が残っていたので削除しています。

akr:r43713 2013-11-19 07:24:52 +0900

configure で LOCALTIME_OVERFLOW_PROBLEM の定義の有無を制御している部分でデフォルトで定義するようにしています。クロスコンパイル時、具体的には RubyInstaller でこのマクロが偽になっていたため Time の Marshal.load のテストが失敗していたそうです。 [ruby-core:58391] [Bug #9119]

drbrain:r43714 2013-11-19 09:34:13 +0900

RubyGems を最新版に更新しています(Gem::VERSION は "2.2.0.preview.2")。Gemfile などで git リポジトリから直接ソースを取得する記法のサポート、LICENSE ファイルの更新 [Bug #9086]、gem which サブコマンドがファイルがみつからなかった時に終了ステータス 1 を返すようにする修正 [ruby-core:57737] [Bug #9004]、拡張ライブラリがインストール時に lib ディレクトリにコピーされない非互換を修正する変更 [ruby-core:58306] [Bug #9106] などがあるそうです。

drbrain:r43715 2013-11-19 09:47:33 +0900

RDoc の最新版をマージしています。バージョンは 4.1.0.preview.2 に更新されています。サーバとして起動した時のページのスタイルシート正規表現オプションのハイライトの修正など見た目に関する変更が主のようでした。
なおこの変更からかは確認していませんが、一度 make clean しないと make docs が失敗するようでした。

nobu:r43716 2013-11-19 09:51:06 +0900

lib/rdoc/store.rb の行末の空白除去。

nobu:r43717 2013-11-19 16:03:51 +0900

.gitignore に r43708 で拡張ライブラリ化に追い出した自動生成するソースファイル ext/rbconfig/sizeof/sizes.c の指定を追加しました。

ko1:r43718 2013-11-19 18:48:47 +0900

rb_gc_resurrect() という関数を追加して、 sweep 予定だけどまだ実際に sweep されていないオブジェクトのマーク処理することができるようにして、rb_fstring() で引数の str が sweep 予定なのを延命するために rb_gc_mark() を呼んでいたのを rb_gc_resurrect() を使うように変更しています。 rb_gc_mark() は mark_stack への追加も実行してしまうのでそれをしないでマークビットだけ立てる処理を作ったとこのことです。なんで mark_stack に入れるとよくないのかわかりませんけど。

ko1:r43719 2013-11-19 18:50:14 +0900

ObjectSpace.reachable_objects_from_root で到達可能な(生きている)オブジェクトを検出するために GC のマーク処理を走らせるところで minor GC 用の処理をしていたため若い世代のオブジェクトからの参照のみ辿っていたので major GC 用の処理にして全てのオブジェクトを辿るようにしています。

ko1:r43720 2013-11-19 18:52:52 +0900

オブジェクトが所属する page が回収済みか確認する heap_is_swept_object() でページの特定に GET_HEAP_PAGE() を利用するようにして、判定は struct heap_page::before_sweep フラグを参照するように変更しています。 これまでの実装だと ptr が所属する page がみつからない場合も一応サポートしていて TRUE を返していましたけど、新しい実装では SEGV しそう……と思いましたが GET_HEAP_PAGE() は NULL を返さないようになっているようなのでそもそもそんなことは起きないはずということのようです。

akr:r43721 2013-11-19 21:29:46 +0900

Net::HTTP のテストで個別に CONFIG でポート番号に 0 を指定していたのをやめて、ユーティリティメソッドの TestNetHTTPUtils#spawn_server で WEBrick::HTTPServer に渡すオプションの :Port を 0 にして常に自動的に確保したポート番号を利用するようにまとめて対応するようにしています。

nobu:r43722 2013-11-19 23:00:26 +0900

bignum.c で gcc 4.4 での(おそらく gcc の不具合による?)警告を除去するための *nlz_bits_ret への書き込みを追加しています。

nobu:r43723 2013-11-19 23:00:29 +0900

RubyGems の Gemfile などで git リポジトリを調節参照する時などに呼び出す git のコマンドの出力を IO::NULL デバイスに捨てて標準出力に出ないようにしています。

nobu:r43724 2013-11-19 23:00:31 +0900

RubyGems の Gem::Util.popen で、IO.popen で生成した IO を close せずに読みっぱなしで子プロセスが zombie 化していたのを修正しています。また 1.8 向けの処理で子プロセスの終了を待つ前に read して pipe 経由の子プロセスの出力を読むようにしています。 pipe のバッファよりも出力が多い時に子プロセスが書き込みでブロックするとプロセスが終了しないのに待ってしまってデッドロック状態に陥いるようになっていたので修正しています。

nobu:r43725 2013-11-19 23:34:20 +0900

RDoc のテストに assert_hard_link という assertion があって File.nlink をチェックしているのですが、FileUtils.ln でハードリンクを作っても File.nlink が増えない環境ではチェックしても無意味なので assertion をスキップするようにしています。

nobu:r43726 2013-11-19 23:38:52 +0900

configure に --with-os-version-style というオプションを追加して OS のバージョン番号を消して OS の識別用の文字列を切り出すためのフォーマットを指定できるようにしているみたいです。よく把握していませんが darwin だけデフォルト値が設定されているところをみると Mac OS X でうまく切り出せない場合があったのでしょうか。