ruby-trunk-changes 2019-06-12

今日は Mutex の lock と例外でデッドロックが発生する恐れがあった不具合修正や Refinements で無限再帰して異常終了することがあった不具合の修正などがありました。

[39ae88ad0d] Nobuyoshi Nakada 2019-06-11 13:31:57 UTC

140b8117bd3c32cb9d0b144937b90f0178a00b0e の再修正。 SyntaxError のメッセージで LHS という専門用語(?)だとわかりにくいので assignment destination を書くようにしています。

[eb016d8353] Nobuyoshi Nakada 2019-06-11 02:03:55 UTC

test/unit のオプションの --subprocess-timeout-scale を --timeout-scale に改名するようにしています。 6096baea5db6505206f0e636c4e5272b4eb72da4 で子プロセスを起動した時だけでなく Thread の待ちのタイムアウトにも使うようになったので subprocess という名前が不正確になったからですね。

[42f0a8fd6f] Nobuyoshi Nakada 2019-06-11 02:09:02 UTC

test/unit でカーネルの時間の解像度を設定する定数を Windows 環境の時に 67 Hz に調整するコードが元からありましたが、これをassert_cpu_usage_low 内の変数から定数にしています。 [ruby-core:81540]

[c4cbaef216] Nobuyoshi Nakada 2019-06-11 02:13:26 UTC

test/unit の assert_cpu_usage_low にキーワード引数 wait と stop を追加して一定時間経った時の停止処理を引数で指定できるようにして、また待ち時間も EnvUtil.apply_timeout_scale を適用するようにしています。しかしこの場合の wait は処理待ち時間というよりどの程度の長さベンチマーク走らせるかって意味があるような気がするのでスケールしていいのかな(使っているテストは一瞬しか待ってないのでこのケースには適当だと思いますが)。

[6db2d6d852] Aaron Patterson 2019-05-31 20:25:24 UTC

Fiber, Continuation および autoload のために内部的に保持するオブジェクトを GC.compact で移動可能にしています。

[23e3c1704b] git 2019-06-11 16:16:45 UTC

6db2d6d8520f88e25d97af77495eb6c879f90b21 のインデントのタブを空白に展開。

[4f9e7c95e4] git 2019-06-11 16:16:49 UTC

version.h の日付更新

[5e018214e7] Jeremy Evans 2019-06-10 22:47:56 UTC

Refinements で定義されているけど using で適用されていないメソッドの呼び出しで無限再帰に陥ることがあった不具合を修正しています。 call cache の method entry の上書きで同じものを入れてしまわないようにしてるんだと思いますが、この修正でいいのかちょっとぱっと見だと不安ですね。変更しないほうが逆に再帰してしまいそうな気がするけど逆なんだなぁ。 [ruby-core:91916] [Bug #15720]

[c1d78a7f0e] Neeraj Bhunwal 2019-04-16 04:03:08 UTC

標準添付ライブラリ monitor で deadlock が起きることがあるという不具合の修正。実際には monitor に固有の問題ではなくて組み込みの Mutex の lock 取得処理(正確には th->keeping_mutexes への rb_mutex_t 構造体の追加)前に割り込みチェックをするようにし、この時に mutex->th を一旦 0 クリアするようにしています。 RUBY_VM_CHECK_INTS_BLOCKING() では例外発生する可能性があり、そこで mutex->th がリークするとデッドロックになるため。 https://github.com/ruby/ruby/pull/2131 [ruby-core:90170] [Bug #15360]

[8354cfd03b] aycabta 2019-06-12 02:00:25 UTC

irb でインデントレベルを管理する処理で rescue 節も認識するように修正しています。

[9593e76ac2] Nobuyoshi Nakada 2019-06-12 06:23:47 UTC

拡張ライブラリ ripper で reline 向けに作ってたエラー時にエラー内容も含めてトークンリストを返す Ripper::Lexer#scan でエラー位置をより正確に返すようにしています。

[88411d350e] Nobuyoshi Nakada 2019-06-12 06:30:07 UTC

irb のテストで文字列のクオートが閉じてない時にエラー部分をハイライトされることをチェックするテストにテストケースを追加しています。