ruby-trunk-changes r39929 - r39950

今日は主にテストの修正がされていて、 ISeq 絡みで SEGV の修正があったようですが詳細は不明です。 あと Thread#join に Float::INFINITY を渡した時に SEGV することがある(手元では再現せず)も修正されています。

naruse:r39929 2013-03-26 03:50:48 +0900

rinda のテストの未使用変数や未初期化インスタンス変数参照などの警告除去。 Rinda::Ring の attr_accessor -> attr_writer はなんででしょう?

naruse:r39930 2013-03-26 03:50:50 +0900

Ring のテストで IPv6 multicast 可能なインタフェースを探すコードを setup から Module として切り出して必要なテストメソッドでのみ呼ぶようにしています。 [ruby-core:53692] [Bug #8159]

svn:r39931 2013-03-26 03:50:52 +0900

version.h の日付更新。

naruse:r39932 2013-03-26 10:13:41 +0900

Ruby の文法(パーサー)のテストで lib, ext, test, sample などの下の .rb ファイルを全てパースするテストを子プロセスを起動してその中で実行することで大量のオブジェクトの生成で GC 負荷が上がるのを防ぐようにしています。

naruse:r39933 2013-03-26 10:42:33 +0900

addr2line.c の 64bit から 32bit への暗黙のキャストの警告除去のため明示的キャストを追加しています。

nobu:r39934 2013-03-26 11:59:09 +0900

r39932 で変更していた assert_syntax は assert_valid_syntax というユーティリティを使っているので、子プロセスに envutil.rb をロードする -r オプションを渡すようにしています。

nobu:r39935 2013-03-26 15:24:24 +0900

r39934 の続き。 test_syntax で子プロセスで読む .rb ファイルを絶対パス指定にするようにソースディレクトリを子プロセスへの引数に追加。また assert_separately のタイムアウトを Float::INFINITY に指定しています。

nobu:r39936 2013-03-26 15:24:26 +0900

RubyVM::InstructionSequence#load というメソッドは存在しないのですが、RubyVM::InstructionSequence#to_a したオブジェクトから ISeq を再構築する関数 iseq_load で rb_iseq_t::local_iseq にその iseq 自身を入れています。なにやら SEGV が発生していたのを直したらしいです。テストがないので詳細は不明。

usa:r39937 2013-03-26 21:16:49 +0900

r39935 の test_syntax の変数名の typo 修正。

akr:r39938 2013-03-26 21:22:12 +0900

Time#strftime の rdoc コメントのちょっとした修正。

akr:r39939 2013-03-26 22:16:31 +0900

Thread.join にタイムアウト値として Float::INFINITY を渡すと SEGV することがある(Debian GNU/Linux on AMD64 だと発生したとのこと)ので内部では TIMET_MAX という time_t の最大値を返すマクロを定義してこれに変換して使うようにしています。

xibbar:r39940 2013-03-26 23:31:31 +0900

DTrace のテストで helper.rb を require するのに require_relative を利用するように変更しています。

akr:r39941 2013-03-26 23:34:20 +0900

拡張ライブラリ socket でソケットアドレス構造体サイズを返す sockaddr_len() で sa_family が AF_INET, AF_INET6, AF_UNIX いずれでもなかった時の値を適当に(多分) AF_INET と同じにしていたのを lstruct sockaddr の sa_family メンバまでのサイズ(最小のサイズ)を計算して返すようにしています。 これはメモリ削減のためなのかなぁ。ここを通ることがあまりないのではないかと思いますけど。

xibbar:r39942 2013-03-26 23:37:24 +0900

minitest のテストでもヘルパーを require するのに require_relative を使うようにしています。

akr:r39943 2013-03-26 23:45:55 +0900

r39939 で追加した TIMET_MAX と TIMET_MIN を internal.h に移動してあちこちで同じように定義していたのを共有するようにしています。

xibbar:r39944 2013-03-26 23:55:04 +0900

拡張ライブラリ psych のテストでも helper.rb を require するのに require_relative を使うように修正しています。

kazu:r39945 2013-03-27 00:22:51 +0900

r39919 の ChangeLog のインデント修正。

svn:r39946 2013-03-27 00:22:55 +0900

version.h の日付更新。

kazu:r39947 2013-03-27 00:24:08 +0900

ChangeLog の行末のタブ除去

akr:r39948 2013-03-27 00:30:27 +0900

internal.h に time_t の最大値 + 1 の数を返す TIMET_MAX_PLUS_ONE を追加して、Float::INFINITY の時だけじゃなく上限を越えている時も TIMET_MAX に丸めるようにしています。また struct timeval の tv_usec も 999999 をセットしてより上限に近付けるようにしています。

kazu:r39949 2013-03-27 01:01:39 +0900

r39948 の ChangeLog の行末の空白除去。

kazu:r39950 2013-03-27 01:01:42 +0900

lib/rubygems/test_case.rb のコメントの typo 修正。