ruby-trunk-changes r44684 - r44694

今日は fork, spawn, popen など子プロセスを起動するメソッドでタイミングよくシグナルを受けとった時などにデッドロックする可能性があった不具合の修正などがありました。

zzak: r44684 2014-01-23 13:59:24 +0900

READM と README.ja を README.md、README.ja.md にリネームしています。 Markdown を使うようにしているんですね。このチケット見覚えがあるけど特に反対はなかったんですねー。 [ruby-core:59167] [Bug #9255]

svn: r44685 2014-01-23 13:59:28 +0900

version.h の日付更新。

charliesome: r44686 2014-01-23 13:59:30 +0900

rb_method_definition_t という構造体のなかのフィールドの順序を入れ替えています。64 bit 環境で padding を減らしてメモリの節約をしているようです。 [ruby-core:59993] [Feature #9441]

charliesome: r44687 2014-01-23 14:07:48 +0900

Kernel#fork, Process.spawn, IO.popen などで 子プロセスを fork する時には pipe を使って子プロセスでのエラー情報を親プロセスに転送するのですが、親プロセスで読み込み時に割り込みがあって errno=EINTR が返ってきたときの考慮がされてなくてデッドロックする可能性があったのでリトライするように修正しています。 https://github.com/ruby/ruby/pull/513

zzak: r44688 2014-01-23 14:28:36 +0900

標準添付ライブラリ fileutils の FileUtils.options_of というメソッドの rdoc 用コメントのサンプルコードの typo を修正しています。 [Bug #9392]

nobu: r44689 2014-01-23 18:15:47 +0900

r44687 の fork のデッドロックのテストを追加しています。 再現性がタイミング次第なので100回繰り返すようにしています。

nobu: r44690 2014-01-23 18:18:47 +0900

標準添付ライブラリ test/unit の assert_raise を minitest の assert_raises に丸投げしていたのを独自実装にして、メッセージの部分に Proc オブジェクトを受け取ってその戻り値で判定する方法をサポートするようにしています。

nobu: r44691 2014-01-23 19:12:28 +0900

r44689 で追加したテスト(r44687 のぶん)を実行する条件として defined?(Process.fork) を使っていましたが defined?(fork) を使うように変更しています。

ko1: r44692 2014-01-23 20:02:37 +0900

TracePoint の a_call, a_return イベントのフックのテストで、別のスレッドから呼び出されたフックの影響を除外するようにしています。テスト時には他のテストの影響で Thread が残っているタイミングがある可能性があって、そのせいでたまに失敗することがあったのを修正しているのだと思います。

ko1: r44693 2014-01-23 20:19:58 +0900

r44692 と同様に TracePoint のテストでフック内で対象の Thread 以外からの呼び出しの影響を除外するようにしています。

ko1: r44694 2014-01-23 20:22:11 +0900

test-all 用のユーティリティ envutil.rb の assert_in_out_err で Mac OS X の場合標準エラー出力に出力される他に DiagnosticReport ファイルに出力されるバックトレースを取得するようにしていますが、終了直後に読みにいくと書き出しが間にあわずに全て取得できなくてテストがエラーになることがあるそうで、少し(0.1 秒)待ってから取得にいくように調整しています。