ruby-trunk-changes 2020-11-30

今日は GC.compact の read barrier 実装の修正や Ractor.shareable? の不具合修正などがありました。

[02c32b2e92] Nobuyoshi Nakada 2020-11-29 06:01:41 UTC

rb_str_buf_new() で引数の capa が文字列のバッファを struct RVALUE の中に埋め込めるサイズだった時には capa を STR_BUF_MIN_SIZE (=63) まで切り上げることはせずそのまま返すようにしています。

[77936ad679] Koichi Sasada 2020-11-29 20:07:28 UTC

GC.compact の処理中に ObjectSpace の page に mprotect(3) などで保護をかけて触ったらシグナルが飛ぶようにしていて、その signal handler の read_barrier_signal() で再度 SIGSEGV や SIGBUS が発生した時に再入にならないようにデフォルトのハンドラに戻してから read_barrier_handler() を呼ぶように修正しています。

[b408d32bf2] git 2020-11-29 20:12:18 UTC

version.h の日付更新

[7e1dbe5975] Nobuyoshi Nakada 2020-11-30 03:18:21 UTC

st_update() のコメントで引数がポインタだということを強調する書きかたに変更しています。

[73a337e214] Kenta Murata 2020-11-30 05:53:13 UTC

拡張ライブラリから型つきのメモリ領域を扱う Memory View 機能で rb_memory_view_get() や rb_memory_view_release() でオブジェクトの参照カウンタを管理して即座に解放せず GC にまかせるようにしているようです。すぐにメモリ領域を解放すると何か問題があったのかも。 https://github.com/ruby/ruby/pull/3816

[555bd83a8e] Nobuyoshi Nakada 2020-11-30 06:19:49 UTC

RubyVM::InstructionSequence.load_from_binary でバイナリフォーマットにした ISeq を読み込む時に ruby 実装のメソッドから呼び出せる builtin 関数の対応するものがなかったら rb_bug() で異常終了させてたのを ArgumentError 例外に変更しています。テストみるとプロセスを分けて Integer#abs の実装で起こしてますが、これどうやって起こしてるんだろう。 builtin func のテーブルは起動時にまとめてロードしてると思うのですが。 [ruby-core:100165] [Bug #17192]

[930a135524] Nobuyoshi Nakada 2020-11-30 07:07:36 UTC

Ractor.shareable? で再帰的なデータ(Array や Hash の参照先に自分自身がある場合)で呼び出し順などによって誤った結果が返ることがあった不具合を修正。rb_obj_traverse() に引数を追加して、traverse の行きがけと帰りがけの他に全ての子を traverse した後に再度呼び出す関数を登録できるようにして再度 RUBY_FL_SHAREABLE フラグをチェックするようにしています。 [ruby-core:101088] [Bug #17344]

[6bef49427a] Jean Boussier 2020-11-18 12:57:01 UTC

register_fstring() に第2引数を追加して、渡された文字列オブジェクトのバッファが静的領域にあるかどうかでバッファ内容をコピーするかどうかを制御するようにして、rb_interned_str()、rb_interned_str_cstr()、rb_enc_interned_str()、rb_enc_interned_str_cstr() などではコピーするようにしています。これらは C API なので渡される文字列バッファが静的領域とかぎらないのでコピーしておくようにしたようです。 [ruby-core:80447] [Feature #13381]

[d92f427d5a] Nobuyoshi Nakada 2020-11-30 07:54:07 UTC

make clean で static-ruby という拡張ライブラリを静的リンクしたバイナリも削除対象にしています。

[b4e21ce25c] Nobuyoshi Nakada 2020-11-30 07:55:47 UTC

make clean-spec で rubyspec_temp というディレクトリも削除対象にしています。

[89774a938a] Nobuyoshi Nakada 2020-11-30 10:06:25 UTC

man/ruby.1 の コマンドラインオプションの -l 説明で入力が chop! で改行が削られるという説明が実情に合ってなかったので chomp! を使うと書きなおしています。 [ruby-core:78099] [Bug #12926]