ruby-trunk-changes 2020-10-14

今日は Ractor のための排他処理の不足の修正や Encoding を freeze して Ractor 間で共有できるようにする変更などがありました。

[fc8b68a52a] Koichi Sasada 2020-10-13 17:36:58 UTC

vm_sync.h のマクロ RB_VM_LOCK_ENTER_LEV() と RB_VM_LOCK_LEAVE_LEV() の定義に含まれてたセミコロンを削除。

[d7de342e41] git 2020-10-13 18:18:18 UTC

version.h の日付更新

[c3ba3fa8d0] Koichi Sasada 2020-10-13 17:03:21 UTC

Ractor の導入時に GVL を保持したまま例外や大域脱出でロック解除せずに抜けてしまうケースがあったようなので構造体 struct rb_vm_tag に lock_rec というメンバーを追加して PUSH_TAG() 時に Ractor がロック保持してたかどうかを保存しておいて POP_TAG() で必要に応じて解放するようにしています。

[11c2f0f36c] Koichi Sasada 2020-10-13 04:16:08 UTC

encoding.c のグローバル変数 enc_table と rb_encoding_list が Ractor からアクセスされるので global_enc_table および rb_default_encoding_list、rb_additional_encoding_list と改名、分解して RB_VM_LOCK_ENTER()/RB_VM_LOCK_LEAVE() で保護してアクセスするようにしています。また rb_ascii8bit_encoding()/rb_utf8_encoding()/rb_usascii_encoding() などで返すための rb_encoding はテーブルを参照しなくて済むように static 変数を導入してこちらを返すようにしています。

[102c2ba65f] Koichi Sasada 2020-10-13 17:10:54 UTC

Encoding オブジェクトは生成時に常に freeze するようにしています。 Ractor 間の共有ができるようにするためのようです。 [ruby-core:100148] [Bug #17188]

[1e316edf60] Hiroshi SHIBATA 2020-10-13 12:06:13 UTC

標準添付ライブラリ drb を default gem 化しています。

[9aab916990] Hiroshi SHIBATA 2020-10-13 13:28:59 UTC

拡張ライブラリ pathname を default gem 化しています。

[0714cb760c] Kazuhiro NISHIYAMA 2020-10-14 06:16:36 UTC

cont.c の enum fiber_status の説明のコメントの重複した行を削除しています。

[ae693fff74] Koichi Sasada 2020-10-14 05:21:57 UTC

c3ba3fa8d01aa3970dc1f4e3dc0090ae171e9e35 の GVL の POP_TAG() での解放処理の再修正。EC_POP_TAG() マクロの定義に解放処理を追加してたのを rb_ec_tag_state() 内に移動しています。race condition があったようです。

[fad97f1f96] Koichi Sasada 2020-10-14 01:43:13 UTC

T_OBJECT 型など struct RVALUE 構造体内にインスタンス変数テーブルのある型以外のオブジェクトのインスタンス変数を管理するためのテーブル generic_ivtbl() も Ractor 間で共有されているので RB_VM_LOCK_ENTER()/RB_VM_LOCK_LEAVE() で保護するようにしています。