ruby-trunk-changes r39919 - r39928

今日は Method オブジェクトを使い捨てていくとたまに SEGV が発生する不具合の修正や Rinda::TupleSpace#take のパフォーマンス改善のための変更などがありました。

nari:r39919 2013-03-25 02:15:54 +0900

method entry を回収する時に mark フラグを 0 クリアしていなかったために Method オブジェクトを使い捨てていった時に SEGV する不具合を修正しています。 r39883 および r39894 で KNOWNBUGS.rb に追加していた不具合の修正です。 [ruby-core:53439] [Bug #8100]
rb_method_entry_t::mark のフラグをセットしているの vm.c の rb_thread_mark() で実行中の呼び出しで cfp に積まれているものを立ててるのですけど、その他がみあたらなくて、ここでクリアしなかった時にどういう流れで SEGV に至るのかちょっとよくわからないので後で良く読んでみたいです。

svn:r39920 2013-03-25 02:15:59 +0900

version.h の日付更新。

kosaki:r39921 2013-03-25 06:00:03 +0900

r39887 で addr2line.c に追加した kprintf() のための関数 putce() で write(2) の戻り値を参照していない警告を抑制するために変数で戻り値を受けるようにしています。

drbrain:r39922 2013-03-25 07:01:56 +0900

r39896 でコメントアウトから戻して r39908 で IPv6 の multicast のインタフェースを選択するようにしたテストは fork が使えないか IPv6 アドレスが使えなかったら skip するようにしています。 [ruby-core:53692] [Bug #8159]

drbrain:r39923 2013-03-25 07:09:35 +0900

Rinda::TupleSpace#take で port が指定されてそこに tuple を移動した時は返り値を nil にしています。 Rinda::TupleSpace#take は dRuby と組み合わせて使う時は TupleSpaceProxy 経由で使われることが多いので port が指定されており、またメソッドの戻り値は dRuby 経由のメソッド呼び出しでは Marshal.dump してネットワーク経由でやりとりされるため、使わない戻り値を返すと遅くなります。その無駄を省く変更のようです。 [ruby-core:53512] [Feature #8119]

nobu:r39924 2013-03-25 14:39:29 +0900

test-all のユーティリティ test/ruby/envutil.rb で子プロセスのシグナルによる終了の時のシグナル名称を検索するのに 2.0 で追加された Signal.signame を使うようにして、また assert_ruby_status で子プロセスのステータスチェックをする時に Process::Status の inspect 結果もメッセージに埋め込むように戻しています。 また signal.c でシグナルのリストで SIGIOT と SIGABRT の順番を入れ替えています。

nobu:r39925 2013-03-25 14:39:32 +0900

r39919 で修正された Method 大量に使い捨てた時の SEGV のテストを KNOWNBUGS.rb から test/ruby/test_method.rb に移動しています。 [ruby-core:53439] [Bug #8100]

nobu:r39926 2013-03-25 18:03:51 +0900

test-all のユーティリティの assert_ruby_status で子プロセスが signal で終了したかどうかでメッセージを変えるためにチェックを2つにわけています。

nobu:r39927 2013-03-25 18:03:54 +0900

r39925 で KNOWNBUGS.rb から移動してきた Method のテストでタイムアウトで終了するはずなので、確かにタイムアウトの例外で抜けてきたことを確認するようにしています。

nobu:r39928 2013-03-25 18:13:08 +0900

(r39903 および) r39906 で修正した String#rpartition の修正ですが、最後の部分文字列の切り出しを文字単位での位置の指定から byte 単位での指定に揃えるように逆に変更して、引数が正規表現じゃない時の offset を文字単位から byte 単位に変換するようにしています。高速化のためとのこと。