ruby-trunk-changes r64395 - r64416

今日は Kernel#exec や system で親プロセスから受け継いだような IO オブジェクトとして管理していない fd をデフォルトでは close しないようにする変更や、引き続き thread まわりの修正がありました。

nobu: r64395 2018-08-17 01:11:54 +0900

appveyor.yml でテスト対象のブランチを trunk だけに指定していたのを消してどのブランチでも動くようにしています。おおー。けどこれってこの変更が appveyor.yml に入ってるブランチじゃないと動かないんですよね、多分。

svn: r64396 2018-08-17 01:11:55 +0900

version.h の日付更新。

nobu: r64397 2018-08-17 01:11:55 +0900

r64207 で win32/Makefile.sub で MJIT 用の precompiled header 生成時に -U オプションで RUBY_EXPORT マクロを削除しているところで、XCFLAGS に含まれている -DRUBY_EXPORT も削除するようにしています。

normal: r64398 2018-08-17 04:59:21 +0900

r63711 の rb_mutex_lock() の deadlock 修正といって RUBY_VM_CHECK_INTS_BLOCKING() の後で mutex->th が書きかわっている可能性を考慮するようにするため mutex->th へのセットを遅延したのがやっぱりまずかったようで、一部 revert しています。 r63711 はいまいち納得がいかなかったのですが、じゃあこれでOKなのかといわれるとなるほどわからん……。 [ruby-core:88503] [Bug #14999] [Bug #14841]

normal: r64399 2018-08-17 08:56:08 +0900

Kernel#exec とか Process.spawn で明示されてない fd をデフォルトで close するようにしていたのを、:close_others オプションが未指定の時は閉じないように変更しています。 うーん、これはいいのかな。この対応のため test 用ライブラリで pipe に明示的に close_on_exec=true を設定するようにしています。あーそうか IO で開いた fd はデフォルトで close_on_exec を設定するようになってるんだっけ確か。なので親プロセスから受け継いだような ruby のオブジェクト経由でない fd についての扱いだけかな。 [ruby-core:88007] [Misc #14907]

nobu: r64400 2018-08-17 10:14:37 +0900

r64399 で追加したテストは fd からの IO.new での IO オブジェクト生成が動かないということで Windows では実行しないようにしています。

nobu: r64401 2018-08-17 10:37:58 +0900

RubyVM::AST::Node#type が返す文字列を fstring を返すようにしています。

nobu: r64402 2018-08-17 10:39:49 +0900

SIGCHLD が未定義の時に sigchld_hit をセットしているところがなかったので、そもそも変数定義も参照もしないように preprocessor で分岐するようにしています。

normal: r64403 2018-08-17 11:06:54 +0900

rb_sigwait_fd_get() で pipe の所有者の pid のチェックを VM_ASSERT() でするようにして条件分岐部分からは削ってます。 glibc の getpid() は結果をキャッシュして syscall の呼び出し抑制するようになってたらしいんですが glibc 2.25 以降はこれをやめているそうなので、毎回 getpid() を呼ぶのはコストが高いからとのこと。

mame: r64404 2018-08-17 12:36:01 +0900

RubyVM クラスの rdoc 用コメントを追加しています。インタプリタの internal に依存していてデバッグや研究用なので素人は使うな、という感じのことが書かれています。

kazu: r64405 2018-08-17 13:00:09 +0900

r64399 の Kernel#system や Kernel#exec などの :close_others オプションのデフォルトの挙動の変更について NEWS ファイルに追記しています。

kazu: r64406 2018-08-17 13:01:12 +0900

r64405 の NEWS ファイルへの追記にチケット番号を追記しています。

nobu: r64407 2018-08-17 14:59:45 +0900

SIGCHLD がない時に不要な関数定義などがあったので preprocessor による分岐を追加して不要コードを括るようにしています。

normal: r64408 2018-08-17 16:47:26 +0900

r64405 の NEWS ファイルへの :close_others オプションのデフォルト値の変更についての記述に、通常 IO オブジェクトとして作った fd には close_on_exec がつくよということも追記しています。うん、やはりそうだった。 [Misc #14907]

eregon: r64409 2018-08-17 18:51:26 +0900

r64398 で修正された regression に対応する ConditionVariable のテストを rubyspec に追加しています。 [ruby-core:88503] [Bug #14999]

eregon: r64410 2018-08-17 19:14:01 +0900

spec/README.md に ruby_version_is メソッドの用途について追記しています。

eregon: r64411 2018-08-17 20:22:30 +0900

rubyspec で Enumerator::ArithmeticSequence の導入に関連して 2.6 以降とそれより前のバージョンで Numeric#step などのテストの結果の確認を分けるようにしています。

eregon: r64412 2018-08-17 20:22:43 +0900

rubyspec で ruby_version_is のバージョン指定方法が間違ってたもの? を修正しています。

eregon: r64413 2018-08-17 20:22:55 +0900

spec/README.md に rubyspec を古い ruby のバージョンでチェックするためのコマンドについて追記しています。といっても古い ruby が起動する状態にして mspec を実行するだけですけど。

eregon: r64414 2018-08-17 22:07:11 +0900

rubyspec の削除されてた socket 関係のテストのファイル群を復活させています。とりあえず復活だけさせてプラットフォームを限定するのを続くコミットでするとのこと。

eregon: r64415 2018-08-17 22:07:24 +0900

ということで rubyspec の socket のテストの Socket::IP_PKTINFO という定数に依存しているものを MSpec に feature としてチェックを追加してそれで guard を入れるようにしています。

eregon: r64416 2018-08-17 22:07:37 +0900

rubyspec の socket のテストで connect_nonblock のテストは FreeBSD で実行しないように platform_is_not メソッドのブロックで括るようにしています。