ruby-trunk-changes r65928 - r65936

今日は MJIT 用の inline cache/call cache などのコピーの不具合修正、IO の潜在的不具合修正などがありました。

k0kubun: r65928 2018-11-22 22:29:44 +0900

MJIT 用の worker で main thread に inline cache や call cache をコピーさせるジョブのための struct mjit_copy_job 構造体で ISeq の struct rb_iseq_constant_body へのポインタを直接持っていたのを struct rb_mjit_unit を持ってここから辿るようにして、既に対象の ISeq が GC されて解放されていた時にコピーをキャンセルして不正なアドレスへのアクセスを避けるように修正しています。

normal: r65929 2018-11-23 05:02:36 +0900

r65922 の pipe と socket の fd のデフォルト non-blocking 化のうち socket のほうは RSOCK_NONBLOCK_DEFAULT というマクロで無効化できるようにして、Windows 版では SOCK_NONBLOCK フラグを自動的に立てないようにしています。 [ruby-core:89973] [ruby-core:89976] [ruby-core:89977] [Bug #14968]

svn: r65930 2018-11-23 05:02:39 +0900

version.h の日付更新。

normal: r65931 2018-11-23 07:44:06 +0900

IO の実装で GVL を解放した後は rb_io_t の構造体の fd は無効になっている可能性があるので、rb_io_wait_readable() のかわりに rb_io_check_closed() で close 済みじゃないかもチェックする fptr_wait_readable() という関数を定義して、これでチェックするようにしています。けど fd を使った後で rb_io_check_closd() を呼んでるので、発生するエラーが IOError (かな?)になるようにしてるだけ(こうしないと Errno::EBADF が発生するらしい)のようですね。 [ruby-core:88305] [Bug #14968]

nobu: r65932 2018-11-23 10:57:26 +0900

Dir.home のテストで 1つの assert_nothing_raised のブロックに複数の処理を入れてたので、それぞれ分けるようにしています。

duerst: r65933 2018-11-23 15:45:26 +0900

enc/unicode/case-folding.rb の Unicode の case mapping ファイルの中身を parse する時に CaseUnfold_11 で今までエラーにしていた条件に IT というフラグをつけて出力するようにしています。 Unicode の 11.0.0 を受け付けるための前準備らしいです。

kazu: r65934 2018-11-23 19:59:59 +0900

Thread のテストで使った Thread の後始末のために Thread#kill を呼んでいるところで &. 演算子を使って後置 if を省略したり、もともと nil チェックしていなかったとこでエラーにならないようにしたりしています。

nobu: r65935 2018-11-23 20:42:50 +0900

r65914 で追加した Proc#<<, Proc#>> や Method#<<, Method#>> の rdoc 用コメントで最初に適用するほうの Proc/Method の arity が 2 だったのを 1つにしています。これは後で呼ばれるほうは引数が 1 のみ許容されることを強調するためだったのかなぁっていう気がするのでわざとだったんじゃないかと思うけど。

nobu: r65936 2018-11-23 21:12:10 +0900

.gitignore に共有ライブラリ用の *.bundle、*.sl、*.so などを追加しています。.sl ってどの環境の拡張子だっけな…と検索してみたら HP-UX 用とか出てきましたが…。