ruby-trunk-changes 2021-11-12

今日は Class/Module のメモリリーク修正や Module#prepend したメソッドから super を呼んでメソッドがみつからなかった時に SEGV していた不具合の修正などのほか rbs と typeprof のバージョン更新などがありました。

[c53aecee3b] Matt Valentine-House 2021-11-10 22:42:40 UTC

8bbd3198068f5e8335ab01f0b29cdae225b25b5b で T_PAYLOAD 型というオブジェクト型を導入して VWA (オブジェクトのスロットを複数まとめて確保してオブジェクトの内容に使うようにするメモリ管理法)を実現した時に(というかおそらく T_PAYLOAD 型による実装をやめた時の戻し忘れ?) T_CLASS 型オブジェクトの rb_classext_t のポインタの解放が漏れていてメモリリークするようになっていたのを修正しています。

[dee2e9b2be] Soutaro Matsumoto 2021-11-11 17:01:53 UTC

gems/bundled_gems の rbs のバージョンを 1.7.0 に更新しています。また tool/test-bundled-gems.rb の rbs ビルド時の rbs コマンド実行を削除し、typeprof のテスト時に rbs のビルド実行済みかチェックするためにみるファイルを共有ライブラリファイルをみるように変更しています。 https://github.com/ruby/ruby/pull/5105

[d08d13700c] git 2021-11-11 17:02:11 UTC

version.h の日付更新

[a9a94540d6] Matt Valentine-House 2021-11-10 21:33:17 UTC

T_CLASS 型オブジェクトで rb_classext_t は VWA が有効になってる場合は連続したオブジェクトヒープの slot に確保されるのでそれを指すポインタは不要なので、USE_RVARGC が有効にビルドされた時には struct RClass から ptr を削除して RCLASS_EXT() は単に struct RClas のサイズぶんポインタをずらすだけにしています。struct RClass のサイズも小さくなるし、次の slot というより連続したメモリ領域をそのまま使うって感じになりますね。けどこれ padding とかは気にしなくていいのかな。

[84202963c5] Peter Zhu 2021-11-11 16:55:35 UTC

Module#prepend で追加されたメソッドから super を呼び出した時に継承ツリー内に対応するメソッドがみつからなかった時に METHOD_ENTRY_INVALIDATED() に NULL を渡してしまって SEGV してしまっていたのを NULL チェックを追加して修正しています。わりとよくありそうなシチュエーションですけど見逃がされてたんですね。あるいはもうちょっと発生条件が厳しいのかも。 [ruby-core:106019] [Bug #18329]

[d0f266460f] David Rodríguez 2021-11-11 19:24:02 UTC

bundler のテストのヘルパーメソッド lockfile_should_be を削除して呼び元で明示的に lockfile の変数名を指定して比較するようにしています。

[1f91009d24] David Rodríguez 2021-11-11 19:26:21 UTC

bundler のテストのヘルパーメソッド have_lockfile を削除しています。

[4736dec58b] David Rodríguez 2021-11-11 19:28:47 UTC

bundler のテストのヘルパーメソッドの gemfile_should_be を削除して呼び元で変数で gemfile を明示的に指定して比較するようにしています。

[3cf7130d70] David Rodríguez 2021-11-11 19:31:24 UTC

bundler のテストで bundler のバージョンで分けていたけど内容が同じ spec があったので 1つに統合しています。

[e73197dff5] Kazuhiro NISHIYAMA 2021-11-12 00:56:24 UTC

GitHub Actions の Windows 環境でコメントアウトしている windows-2022 でのビルド時の vcvars の設定のファイルパスを変更しています。

[98b442e013] Samuel Williams 2021-10-22 02:04:22 UTC

4b8903421828cb9d4de139180563ae8d8f04e1ab で導入した IO::Buffer の IO::Buffer#copy メソッドの実装で receiver の flags の RB_IO_BUFFER_IMMUTABLE ビットフラグをみて立ってたら例外発生させるようにしています。

[c833ece5f7] Samuel Williams 2021-10-22 02:05:00 UTC

IO::Buffer.for というクラスメソッドを追加して引数の文字列オブジェクトに rb_str_locktmp() を呼んで ruby のメソッドから変更できないように lock してこれをバッファとする IO::Buffer インスタンスを作ることができるようにしています。引数のオブジェクト型をチェックせずに rb_str_locktmp() に渡してるけどこれは大丈夫かな? flags にビットを立ててるだけだけど他の型だと別の意味になるかも。

[a046081838] git 2021-11-12 07:04:21 UTC

gems/bundled_gems の typeprof のバージョンを 0.20.3 に更新しています。

[3aa62b455c] Yusuke Endoh 2021-11-12 07:19:30 UTC

io/console のテストで io/console のライブラリパスを得る為の前処理の部分で CI で Encoding::CompatibilityError が発生しているらしく調査のため rescue して $LOADED_FEATURES の内容を表示するデバッグ出力を追加しています。

[61938e2db5] Yusuke Endoh 2021-11-12 07:40:49 UTC

MJIT のテストで VM 命令ごとの JIT コンパイルのテストのためスクリプトコンパイルした時に対象の VM 命令が含まれるかのチェックをしているところで opt_regexpmatch2 という命令は実際には含まれていても VM 命令の trace 対応化の影響で含まれていないと判定されてしまうようなので特別に警告を抑制するようにしています。 [ruby-core:105800] [Bug #18269]

[415671a282] Yusuke Endoh 2021-11-12 05:37:16 UTC

parse.y の yycompile() のエラー時に struct parser_params::lvtbl というポインタの解放漏れがあったのを修正しています。