ruby-trunk-changes 2022-09-19

今日は主に Process.daemon の二重 fork をやめた変更や tool/downloader.rb のコマンドラインオプション追加などがありました。

[a0b0991eed] Nobuyoshi Nakada 2022-09-17 13:48:40 UTC

tool/downloader.rb でダウンロードする対象のファイルごとのコマンドラインオプションの解析をクラスに移動しています。Unicode 用のオプションが別の種類のファイルダウンロードにも使える状態だったのでそれを分離するため。

[cc533cb607] Nobuyoshi Nakada 2022-09-17 13:51:30 UTC

tool/downloader.rb の一部のオプションに long option を追加しています。さらに -a (--always) の逆のオプションとして -u/--update/--if-modified を追加しています。

[ea22403653] Nobuyoshi Nakada 2022-09-17 13:52:07 UTC

common.mk の Unicode.org からのデータダウンロード関係の変数から tool/downloader.rb を実行するコマンド部分を UNICODE_DOWNLOADER という変数に切り出して再利用するリファクタリング

[12e5e5b573] Nobuyoshi Nakada 2022-09-19 05:11:37 UTC

bootstraptest/runner.rb で標準エラー出力にメッセージを出力して Kernel#exit でエラー終了する処理を Kernel#abort の利用に変更しています。またエラーメッセージ内のオプション名が古い(?)ので変更しています。

[e75d963685] Jimmy Miller 2022-09-19 06:09:38 UTC

YJIT の splat 引数対応で ruby2_keywords フラグつきの Hash への対応の漏れを修正しています。 https://github.com/ruby/ruby/pull/6395

[7cab7e5fde] Takashi Kokubun 2022-09-19 06:13:53 UTC

doc/yjit/yjit.md に記述していたサンプルの configure のオプションが --disable--install-rdoc が重複していたので1つ削っています。 https://github.com/ruby/ruby/pull/6400

[1c9381283e] Nobuyoshi Nakada 2022-09-18 15:26:49 UTC

Process.daemon についてこのメソッドを呼んだプロセスが二重に fork していて子プロセスではなくなってることを確認するテストを追加しています。

[ae07336529] Nobuyoshi Nakada 2022-09-18 15:46:52 UTC

Process.daemon の実装で rb_fork_ruby() を2回呼び出していたのを 1回だけにして setsid(2) の呼び出しで完了としています。daemon は 2回 fork することで制御端末から切り離すんだったと思いますが、コミットログをみたところ Process.daemon は通常 fork (または Process.spawn)した子プロセスから呼び出されるわけで、その呼び元からみると 1回 fork した時点で孫プロセスになるので 2回 fork は不要とのこと。しかしそうだとすると fork 前に setsid(2) しないといけない気がする。で調べてると setsid(2) は既に process group のリーダーだとエラーを返すので、確実に呼べるようにするために1回目の fork をするというような説明をみかけました。てことは shell から実行したプロセスで呼んだり、Process.setsid を呼んでから Process.daemon を呼ぶみたいなことをするとこの変更後だとうまくいかなくなるんじゃないでしょうか。

[5883bc7c07] Takashi Kokubun 2022-09-19 07:34:03 UTC

YJIT で --yjit-stats オプションが指定された時に統計情報の収集のためのカウンタに使う命令が使えるプロセッサ(ARMv8.1 以上)かどうかチェックして使えなかったらエラー終了させるようにしています。 https://github.com/ruby/ruby/pull/6401