ruby-trunk-changes r47322 - r47341

今日は dynamic Symbol の不具合修正、拡張ライブラリ zlib の不具合修正、benchmark の追加修正などがありました。

normal: r47322 2014-08-30 19:30:00 +0900

rb_sym2id() で pindown されていない Symbol を pindown してから返す場合 dsymbol_pindown() の戻り値を返すようにしています。 pindown する前の sym を返してしまっていたのでたまに test-all で SEGV が発生していたとのこと。

nobu: r47323 2014-08-30 22:29:45 +0900

gcc 3.4 以降で拡張機能を利用して warn_unused_result という attribute を関数宣言に追加するマクロ WARN_UNUSED_RESULT() を定義して、dsymbol_alloc(), dsymbol_check(), dsymbol_pindown() など Symbol 管理関係の関数にこれを利用して、戻り値チェックされていないと警告が出力されるようにしています。

normal: r47327 2014-08-31 08:53:28 +0900

拡張ライブラリ zlib の Zlib::GzipReader で rewind を呼ぶと zstream::flags の ZSTREAM_FLAG_GZFILE がクリアされてしまう不具合を修正しています。 [ruby-core:64128] [Bug #10101]

svn: r47328 2014-08-31 08:53:39 +0900

version.h の日付更新。

nobu: r47329 2014-08-31 11:49:50 +0900

r47260 および r47262 で Benchmark の時間計測を Process.clock_gettime に変更して環境によっては失敗するようになったテストで assert_in_delta を使っていたのを assert_in_epsilon を利用するように変更しています。 assert_in_delta はデフォルトの誤差が 0.001 なのに対して assert_in_epsilon はテストする値からの相対値(sleeptime が 1.0 ならおおよそ 0.001、つまり現在だとほぼ同じ)になります。

nobu: r47330 2014-08-31 15:05:43 +0900

r47320 で標準添付ライブラリ benchmark の時間計測に使う Process.clock_gettime のタイマーの種類を Process::CLOCK_MONOTONIC_RAW があればそれを優先するようにしましたが、Process::CLOCK_MONOTONIC_RAW はC ヘッダに定数があれば定義されますが、ヘッダに定義はあるのに実際に呼ぶとエラーになる可能性があるので、実際に呼んでみて例外が発生したら利用しないようにするようにしています。

akr: r47341 2014-08-31 16:59:12 +0900

r47330 の変更による文法エラーを修正しています。