ruby-trunk-changes r42611 - r42625

今日は test-all で fork 時にメモリ不足でエラーになる問題の対策や Process.clock_gettime に関連して clock_id の追加やビルドプロセスの修正などがありました。

nobu:r42611 2013-08-19 08:31:26 +0900

.travis.yml でビルド前に実行する before_script に configure を実行後と make reconfig で再 configure 後の config.status と .ext/include の内容を比較して結果を出力するように設定を追加しています。 Travis CI で何か問題があって調べるためでしょうか。

svn:r42612 2013-08-19 08:31:31 +0900

version.h の日付更新。

nobu:r42613 2013-08-19 08:37:30 +0900

r42611 で .travis.yml に追加したスクリプトディレクトリ名の typo を修正。

nobu:r42614 2013-08-19 08:41:41 +0900

r42611 の .travis.yml の設定の typo もうひとつ修正。

akr:r42615 2013-08-19 12:57:23 +0900

Process.clock_gettime の clock_id で指定できる定数に Linux 3.0 からサポートされる CLOCK_REALTIME_ALARM と CLOCK_BOOTTIME_ALARM を追加しています。

nobu:r42616 2013-08-19 13:03:22 +0900

r42604 で修正して r42606 で revert された clock_gettime(2) の configure での検出のリベンジだと思いますが librt をリンクして clock_gettime() が見つかった時には再度 AC_CHECK_FUNCS() による検出は行なわず HAVE_CLOCK_GETTIME も定義しておくようにしています。どうやら make reconfig の問題はこの clock_gettime() の検出にまつわるものだったみたいです。

usa:r42617 2013-08-19 13:29:41 +0900

include/ruby/win32.h の定数マクロ CLOCK_MONOTINIC -> CLOCK_MONOTONIC の typo 修正。また win32/win32.c で定数や方 clockid_t の定義が重複していたので削除しています。

nobu:r42618 2013-08-19 17:01:26 +0900

Process.spawn や fork、system などで fork(2) を実行した時に errno == ENOMEM で失敗した時には Full GC を実行してリトライしてみるようにしています。

ko1:r42619 2013-08-19 17:43:13 +0900

環境変数をセットしてで実行できる make test-all のメモリプロファイラ test/profile_test_all.rb でテストメソッドの成功失敗の情報も表示するようにしているみたいです。試してないので多分ですけど。

ko1:r42620 2013-08-19 17:44:50 +0900

test/ruby/test_fiber.rb の test_many_fibers という大量の Fiber を生成するテストで Fiber を生成後に GC.start で Full GC を実行してすぐにメモリを回収するようにしています。おそらくメモリ使用量を抑えて test-all での fork(2) 時のエラーを回避しようとしているのではないかと思われます。

ko1:r42624 2013-08-19 21:00:51 +0900

gc.c のデバッグ用の機能を有効にするマクロ GC_DEBUG を定義されているかではなくて 0/非0 に定義されているかどうかでチェックするようにして、未定義時には 0 に定義するガードを追加しています。また assert() 文の条件部で演算子の優先順位の間違いで誤ったチェックになっていたのをかっこをつけて修正したり、GC_DEBUG 有効時に struct RVALUE に追加されるフィールドの型をアライメントのために修正したりしています。

akr:r42625 2013-08-19 21:39:09 +0900

#include "ruby/missing.h" を include/ruby/ruby.h から include/ruby/defines.h に移動しています。 ChangeLog によると Debian squeeze 上の gcc-mingw32 で ビルド時(クロスコンパイル?)に clock_gettime() で使う struct timespec の定義のために include/ruby/win32.h より前に ruby/missing.h を #include しないといけなかったためとのことです。