今日は Thread の deadlock チェックを無効にできるよう Thread.enable_deadlock= メソッドを追加する変更などがありました。
[0bbbb5a657] Aaron Patterson 2020-10-27 21:10:39 UTC
Object#initialize_copy の実装で使われる rb_obj_copy_ivar() でコピー先のオブジェクトがすでにインスタンス変数管理が埋め込みじゃなくヒープ利用になってることを想定したコードを削除して、RUBY_ASSERT() で埋め込み状態であることを確認するようにしています。作ったばっかりでまだインスタンス変数ないはずだから不要ということですね、たぶん。
[9190451fcf] git 2020-10-28 15:42:09 UTC
version.h の日付更新
[2c19c1484a] Aaron Patterson 2020-10-28 16:42:34 UTC
ObjectSpace.memsize_of で T_OBJECT 型オブジェクトのインスタンス変数が埋め込みじゃなくてヒープ利用時に as.heap.ivptr の NULL チェックをしていましたが、flags で埋め込みじゃないことを確認した場合常に使ってるはずなので余分なチェックを削っています。
[5be42c1ef4] Aaron Patterson 2020-10-28 16:57:44 UTC
2c19c1484abda749540c5865de4dce5a47fc8f0f と同様で、0b81a484f3453082d28a48968a063fd907daa5b5 で T_OBJECT 型のオブジェクト作成時に最初から flags に ROBJECT_EMBED を立ててインスタンス変数は埋め込みで管理しているという体になっているので ROBJECT_IVPTR() は常に有効なポインタを返すので NULL チェックを削っています。
[a99f52d511] Aaron Patterson 2020-10-28 17:16:57 UTC
5be42c1ef4f7ed0a8004cad750a9ce61869bd768 と同様に gc_ref_update_object() でも T_OBJECT 型オブジェクトの ROBJECT_IVPTR() の NULL チェックを削っています。
[dfb3605bbe] Jeremy Evans 2020-10-28 22:27:00 UTC
複数の Thread を利用している時に dead lock を検出する機能が Signal.trap を使っている時に(実際にはシグナルの受信によって抜けるのを期待しているコードだけど) dead lock 検出してエラーになってしまうという問題の対処として、Thread.ignore_deadlock= というクラスメソッドを追加しています。 true を設定すると完全に dead lock 検出のためのチェックをスキップしてしまうようです。 [ruby-dev:50186] [Bug #13768]
[58fd54f914] Jeremy Evans 2020-10-28 21:31:20 UTC
io.c のインデントの修正のみ。
[d8b0f1f7a8] Aaron Patterson 2020-10-28 22:11:06 UTC
0bbbb5a6578fc3c6ebfb2150a0fffe96880ae515 や 2c19c1484abda749540c5865de4dce5a47fc8f0f と同様に obj_free() でも T_OBJECT 型オブジェクトの flags に ROBJECT_EMBED が立っている時のポインタの NULL チェックを削っています。
[9f3adaf529] Aaron Patterson 2020-10-28 23:58:17 UTC
拡張ライブラリ socket で T_OBJECT 型のオブジェクト生成時に NEWOBJ_OF() マクロを利用していたのを rb_obj_alloc() を呼ぶようにして、フラグのセットなどの初期化をこれにまかせるようにしています。
[bf951c763d] Nobuyoshi Nakada 2020-10-29 08:37:29 UTC
VM 用コードの生成用ツールの一部 tool/ruby_vm/loaders/insns_def.rb で insns.def を読み取る時に VM 命令の operand の "..." は "(...)" のように先頭に書く時のみ可能で、通常の引数の後に組み合わせることはできないのでそれをエラーにするようにしています。後に普通の引数を書くのはいいのかな(今のところ insnd.def にはそういう命令はないですが)。