ruby-trunk-changes 2020-10-23

今日は GC.compact と MJIT の併用時の不具合修正や Numeric#step や Range#step の第2引数の 0 を常にエラーにする変更などがありました。

[abf678a439] Aaron Patterson 2020-10-21 20:16:15 UTC

GC.compact と MJIT の併用で MJIT が参照する call cache 内のオブジェクトが移動されてしまって異常終了することがあるらしく、MJIT を GC 中に停止させるためのロックを取得/解放する mjit_gc_start_hook()/mjit_gc_exit_hook() で in_gc を真偽値ではなくて数値にして再帰的ロックがかけられるようにして、gc_compact() で garbage_collect() と gc_compact_after_gc() を呼ぶ全体にもロックをかけて gc_compact() による pin down とその後の移動の処理のあいだのロックが外れる瞬間に MJIT が動かないようにしています。

[9a6720a15d] Aaron Patterson 2020-10-22 16:49:26 UTC

6cb6d5abc36ede9d5158c2cd90734134838e6bfb1484b786aee8d411a9e2278ac6d6e44aedbf6662 で mjit_capture_cc_entries() に追加していたデバッグ用の assert() を削除しています。 abf678a4397c6c00a1bb686043e377d372e695a4 の修正がここで調査したかった不具合の修正になってるみたいです。

[b9193df971] git 2020-10-22 16:52:32 UTC

version.h の日付更新

[ef3c25888e] Andrew Kerr 2020-10-22 17:05:41 UTC

標準添付ライブラリ irbIRB.irb_at_exit のコメントの typo 修正。

[196eada8c6] Alan Wu 2020-10-22 22:20:35 UTC

vm_callinfo.h の vm_cc_cme_set() のコメントの typo 修正。

[7cf34cfaa3] 卜部昌平 2020-10-21 05:06:49 UTC

GitHub Actions の workflow 設定 .github/workflows/spec_guards.yml を追加しています。Travis CI でやっていたテストの一部の古い ruby で rubyspec を実行するというテストを移植しているようです。

[40bad72f31] Takashi Kokubun 2020-10-23 04:59:13 UTC

abf678a4397c6c00a1bb686043e377d372e695a4 の MJIT を GC 中に停止するためのロックを解放する mjit_gc_exit_hook() で in_gc が負になる(0の時に呼ばれた)場合に無視するのではなく RUBY_ASSERT_ALWAYS() で異常終了させるようにしています。 https://github.com/ruby/ruby/pull/3687

[f754b42285] Kenta Murata 2020-10-23 06:26:51 UTC

Numeric#step や Range#step の第2引数のステップ幅に 0 を指定した時に Enumerator を返す場合でもエラーにするようにしています。 [ruby-core:91324] [Feature #15573]