ruby-trunk-changes r63960 - r63963

今日は timer thread へのイベント通知用 pipe を fork 前に親プロセスで close() していたのをやめて子プロセスで timer thread 起動する時に開きなおさせる変更などがありました。

normal: r63960 2018-07-13 08:23:25 +0900

timer thread とのイベント通知用の pipe は timer_thread_pipe.writing というメンバーで書き込み中の数を atomic にカウントして native_stop_timer_thread() で timer thread を停止する時に書き込み中イベントがあったら native_thread_yield() して待つようになってましたが、これをやめています。待ち合わせしていたのは pipe の書き込み側の fd を close() するためだったのですが、そもそも timer thread を fork のために止めるたびに close しなくても、timer thread 起動時に owner_pid を確認して子プロセス側だったら閉じて開きなおすというふうにすることで閉じなくても済むようにしています。ふむ、なるほど。一時的に子プロセスに pipe の fd が共有されるけど、すぐ閉じるから問題ない、か……? なーんか直感的に見落してそうな気がしますね。コミットログ読むとこれも timer thread をなくすという計画に向けた変更みたいです。

svn: r63961 2018-07-13 08:23:26 +0900

version.h の日付更新。

normal: r63962 2018-07-13 12:15:04 +0900

Signal.trap の SIGCHLD のハンドラ設定のテストでタイムアウトを伸ばしています。CI で失敗してるそうですが負荷のせいじゃないかとのとで。

normal: r63963 2018-07-13 15:05:43 +0900

r63960 で追加した assert_close_on_exec() というデバッグ用の関数で fd のフラグのチェックに失敗した時に fd=2 (stderr) に直接 write(2) で出力するようにしていましたが、write(2) の戻り値を無視していたので警告が出るのを明示的に (void) にキャストして警告抑制しています。