今日は multi thread 状態での fork 時の ubf_list の再初期化の修正や rubyspec の一部プラットフォームのための対応などがありました。
svn: r64481 2018-08-21 00:34:00 +0900
version.h の日付更新。
eregon: r64482 2018-08-21 00:41:00 +0900
r64471 の rubyspec のテストを Windows で一部動かないようにする platform_is_not の追加を revert しています。
eregon: r64483 2018-08-21 00:48:27 +0900
rubyspec での win32ole のテストで時々失敗するので例外発生時に1度リトライするようにしていたテストで、エラー頻度が高かったので4回までリトライするように修正しています。
normal: r64484 2018-08-21 05:45:40 +0900
拡張ライブラリ socket の UDPSocket#recvmsg の timestamp のテストでマルチスレッド環境では処理が止まってしまうことがあるテストで謎の IO.select 追加の対処をしていましたが、これでもまだ止まることがある? みたいで、recvmsg を呼ぶ socket に対して IO.select で読み込み可能かチェックしてタイムアウトで落として無限に待ってしまわないようにしています。 [ruby-core:87836] [Bug #14898]
normal: r64485 2018-08-21 06:34:39 +0900
thread_pthread.c の ubf_list_head の初期化および ubf_list_lock の mutex の初期化を Init_native_thread でしていたのを atfork のフックで実行するようにして fork した子プロセスで再初期化されるようにしています。 [ruby-core:88578] [Bug #15013]
normal: r64486 2018-08-21 06:34:44 +0900
thread.c および thread_sync.c で list_for_each_safe() の引数に使う変数のうち next のほうは初期化不要なので不要な初期化を削っています。そこまでせんでも……という気もするけどコードサイズが減るのかな。
normal: r64487 2018-08-21 08:48:03 +0900
構造体 rb_fiber_t のメンバー status と transferred を bitfield 化することで構造体サイズダイエットしています。
normal: r64488 2018-08-21 09:16:45 +0900
internal.h から既に存在していなかった関数 rb_divert_reserved_fd() の宣言を削除しています。
normal: r64489 2018-08-21 10:01:37 +0900
r59192 の rb_thread_ptr() に倣って cont.c のオブジェクトの VALUE から rb_context_t や rb_fiber_t のポインタを得る関数 rb_cont_ptr() や rb_fiber_ptr() を定義して GetContPtr(), GetFiberPtr() のかわりに使うようにしています。
normal: r64490 2018-08-21 10:01:42 +0900
r64489 と同様に GetMutexPtr() を置き換える rb_mutex_ptr() という関数を定義してこちらを使うようにしています。
nobu: r64491 2018-08-21 11:02:54 +0900
MJIT 用の minimized header 生成のルールに timestamp ファイルを利用するため、タイムスタンプファイル用ディレクトリへの依存も追加しています。 [ruby-core:88584] [Bug #15015]
nobu: r64492 2018-08-21 11:11:39 +0900
r64487 の BITFIELD() マクロ(?) の使いかたが間違ってたので修正しています。