今日は 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
6cb6d5abc36ede9d5158c2cd90734134838e6bfb や 1484b786aee8d411a9e2278ac6d6e44aedbf6662 で mjit_capture_cc_entries() に追加していたデバッグ用の assert() を削除しています。 abf678a4397c6c00a1bb686043e377d372e695a4 の修正がここで調査したかった不具合の修正になってるみたいです。
[b9193df971] git 2020-10-22 16:52:32 UTC
version.h の日付更新
[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]