ruby-trunk-changes 2021-03-09

今日は WIndows 環境での Ractor 対応のためのグローバルなリソースの排他処理追加や mutex の後始末漏れの修正、拡張ライブラリ zlib で割り込み時に処理がエラーになることがある不具合の修正などがありました。

[9299703b39] Nobuyoshi Nakada 2021-02-23 11:51:02 UTC

win32/win32.c で環境変数を取得するためのメモリ領域を保持する uenvarea という変数へのアクセスを排他するため mutex を追加して thread_exclusive() マクロで排他処理するようにしています。

[b7d4dcf3a6] Nobuyoshi Nakada 2021-02-23 12:30:54 UTC

win32/win32.c の install_vm_exit_handler() で ruby_vm_at_exit() の呼び出しを必ず 1回だけにするために static 変数を使って制御していたところを InterlockedCompareExchange() を使ってより厳密に複数スレッド対応(つまり Ractor 対応?)しています。

[e85bffc324] Nobuyoshi Nakada 2021-02-23 13:48:11 UTC

win32/win32.c で単調増加するカウンタとして使ってる readdir_internal() の dummy_ino や rb_w32_pipe() の serial() のインクリメンタルを InterlockedIncrement() を使って atomic に行われるようにしています。

[0c5f8c6276] wanabe 2021-03-07 12:22:47 UTC

拡張ライブラリ zlib で GVL を解放してブロックする関数の呼び出し中にシグナルで割り込まれたために返ってきたけどリトライ可能な時にリトライするようにしています。 [ruby-core:102738] [Bug #10961]

[7110795f37] git 2021-03-09 04:19:21 UTC

version.h の日付更新

[2a83650b0f] Nobuyoshi Nakada 2021-02-19 02:40:37 UTC

Windows 環境で ruby_vm_destruct() で mutex など? 排他処理のための領域をロック解放しないままメモリ解放しているというエラーが発生する(なにかそういう verifier があるのかも)という不具合の修正のため ruby_vm_destruct() で rb_vm_t::waitpid_lock と rb_vm_t::workqueue_lock の rb_native_mutex_destroy() を呼び出しておくようにしています。 [ruby-core:92668] [Bug #15852]

[5f821ee977] Nobuyoshi Nakada 2021-03-09 11:36:15 UTC

configure の --with-coroutine オプションのチェック時に ucontext や copy が明示的に指定された時にも指定がなかった時と同様に環境から利用する coroutine を決めるようにしています。 make reconfig を安定させるためとのことで、configure.ac を変更してやりなおした時に反映されるようにするためかな。