ruby-trunk-changes r64417 - r64448

今日は MJIT で debug section から C の行番号を読むための変更の revert や Mutex#sleep の spurious wakeup の影響を軽減するための変更などがありました。

eregon: r64417 2018-08-17 23:52:18 +0900

r64416 で FreeBSD 向けの guard を追加した rubyspec の socket のテストに Solaris でも実行しないように guard を追加しています。

eregon: r64422 2018-08-18 08:51:47 +0900

rubyspec の socket のテストで Solaris で動かないものに platform_is_not の guard を追加しています。

svn: r64423 2018-08-18 08:51:48 +0900

version.h の日付更新。

k0kubun: r64424 2018-08-18 10:10:03 +0900

r64322 と r64323 で MJIT の実行時にコンパイルしたコードのデバッグセクションから C の行番号を取得して VM の pc の調整に利用しようとしていたようなのですが、あきらめて revert しています。 C のコードが別の命令位置で共有されることが多くてこのアイデアは無理だったみたいです。

k0kubun: r64425 2018-08-18 11:04:44 +0900

tool/downloader.rb に r64282 や r64317 で HTTP でダウンロードする時に 502 や 503 エラーをリトライ対象にするようにしていましたが、たまに GitHub が 500 を返すことがあるので、その時もリトライ対象にするようにしています。

k0kubun: r64426 2018-08-18 11:15:41 +0900

拡張ライブラリ fiddle のテストの test_nogvl_poll で MJIT が有効だと失敗していたので skip していましたが、直ってるっぽい? ので skip を消しています。

k0kubun: r64427 2018-08-18 11:20:46 +0900

test/lib/zombie_hunter.rb で MJIT が有効だとコンパイラのプロセスが子プロセスとして起動するため leak 判定に影響するため無効にしていた ZombieHunter の定義を復活させています。normal さんの修正で直ってるはずとのこと。

nobu: r64429 2018-08-18 11:44:35 +0900

Kernel#system のテストメソッドを test_system_exception から後半の非ASCII文字を渡す部分を test_system_exception_nonascii として切り出して、mswin および mingw の環境では吐き出す shell スクリプトのコマンドの先頭に "@" をつけてコマンドがエコーバックされないようにしています。

kazu: r64433 2018-08-18 13:09:48 +0900

irb のテストで IRB.setup を呼ぶ時に ~/.irbrc を実行してしまわないように -f オプションを渡すようにしています。このオプション知らなかったな。あまり標準的な名付け方じゃないな。

normal: r64436 2018-08-18 13:24:31 +0900

thread_sync.c の do_sleep() で Mutex のメソッドの時はメソッド呼び出しを使わず直接 rb_mutex_sleep() を呼ぶようにしています。パフォーマンスのためとかじゃなくて割り込みが発生しないようにということらしい。つまり Mutex#sleep の再定義は効かなくなる場面があるわけで、うーんって感じですね。 [ruby-core:88524] [Bug #14999]

normal: r64440 2018-08-18 15:05:17 +0900

と思ったら r64436 は revert されてました。CI の失敗の対策として入れたけど効果がなかったとのこと。

normal: r64441 2018-08-18 15:33:49 +0900

Mutex#synchronize の実装で unlock する時にその Thread が Mutex の owner じゃなかった時に unlock 処理をスキップするようにしています。なんかまた危険そうな香りがしますねー。まあでも mutex->th のチェック後に割り込みとかでその thread 自身がセットされるというのはないか…。というか synchronize のような使いかたで unlock 時に owner が変わってるってどういう状態なんだろ。

kazu: r64442 2018-08-18 16:26:23 +0900

r64408 で追記した NEWS ファイルのインデント修正のみ。

normal: r64444 2018-08-18 18:07:36 +0900

thread.c の sleep_timespec() などで sleep から割り込みで起きた時に vm_check_ints_blocking() やその先の rb_threadptr_execute_interrupts() などで割り込みの原因に応じて Thread#raise など ruby レベルの割り込みの場合はすぐに起きて spurious check を省略するようにしています。 [ruby-core:88537] [Feature #15002]

nobu: r64445 2018-08-18 18:53:11 +0900

NEWS ファイルを rdoc 記法から Markdown 記法に変換しています。

nobu: r64446 2018-08-18 18:56:43 +0900

NEWS ファイルの ruby スクリプトにおける false を意味しているところをバッククオートで囲んで code に指定するようにしています。

naruse: r64447 2018-08-18 21:35:28 +0900

r64407 の SIGCHLD がない環境での不要コードを preprocessor の分岐内に収めるようにする変更で mswin の CI が壊れてるそうなので revert しています。

eregon: r64448 2018-08-18 22:52:53 +0900

r64441 の Mutex#synchronize の実装の unlock 時の処理の修正を revert しています。やっぱりそもそも synchronize 内で owner が変わってるのおかしいからそこを保つようにしようよ、ということみたいです。 [Bug #14999]