ruby-trunk-changes r64196 - r64206

今日は timer thread の削除という大仕事の revert や Numeric#step のために Enumerator::ArithmeticSequence という新規クラスの追加などがありました。

k0kubun: r64196 2018-08-05 23:33:40 +0900

mswin 版の MJIT で C のソースファイルを単にコマンドラインの引数に渡すのでなくて -Tc というオプションを使って渡すようにしています。これは C ソースファイルであることを明示する指定方法みたいです。

normal: r64197 2018-08-06 05:06:49 +0900

SIGCHLD の独自処理のために pthread_cancel(3) を利用していたのをやめています。 "it's painful to use correctly." だそうで、うん、昔読んだ(ピアソンエデュケーションの) pthread の本にもそんな感じのこと書いてあったなぁ。 [ruby-core:88282] [Misc #14962]

svn: r64198 2018-08-06 05:06:50 +0900

version.h の日付更新。

normal: r64199 2018-08-06 05:06:55 +0900

IO と Thread と Signal.trap がからむテスト([Bug #5757] をみると select 中のシグナルの割り込みが遅いという問題のテストらしい)で子プロセスが止まらない現象が起きているそうなのでとりあえず Process.wait にタイムアウトをつけるようにしています。

normal: r64200 2018-08-06 06:27:14 +0900

SIGCHLD の処理のための pipe の fd を構造体 struct waitpid_state のメンバーに追加して持ち回るようにして rb_sigwait_fd_get() や rb_sigwait_fd_put()、rb_sigwait_fd_migrate() の呼び出しを抑制するようにしています。一旦取得したら waitpid の処理が完了するまで保持し続けるようにしているみたいです。

normal: r64201 2018-08-06 10:06:21 +0900

SIGCHLD の処理の sigwait_fd_migrate_sleeper() で fd を待っている thread を起こす際に th->interrupt_lock をロックしておくようにしています。 struct waitpid_state には mutex はないんだっけ。ないな…。これだけ複雑になるとどうしようもない気もしますが割と凡ミスっぽいですね。

hsbt: r64202 2018-08-06 14:01:08 +0900

tool/sync_default_gems.rb で date の同期をする時に checkout 後に ext/date/lib/date_core.bundle というファイルを消すようにしています。 git checkout しただけだとできないと思うので、そのリポジトリで build した時とかにできるやつを無視するためかなぁ。

normal: r64203 2018-08-06 14:22:00 +0900

r64107 から続けてきた timer thread を廃止する(mswin 以外で)という変更とそれに続く修正をまとめて revert しています。 IO まわりでさらに大きな変更を入れないといけなさそうなので、一旦 timer thread は復活させるということで、またいずれリトライしたいっぽい様子ではあります。 [ruby-core:88306] [ruby-core:88088] [Misc #14937]

normal: r64204 2018-08-06 17:42:04 +0900

拡張ライブラリ ripper のテストで Process.setrlimit でメモリ使用量に制限をしてメモリを食い潰さないか確認するテスト(たぶん)で、MJIT を有効にすると制限値を超えることがあるみたいなので RubyVM::MJIT.enabled? をチェックして制限値を調整するようにしています。

mrkn: r64205 2018-08-06 18:08:28 +0900

Enumerator::ArithmeticSequence というクラスを追加しています。 Enumerator::ArithmeticSequence は Enumerator の一種で yield する値が数値のみというものです。 Numeric#step から返す Enumerator の実装のために使っていて、主に内部的に使うためのクラスのようですね。 [ruby-core:82816] [Feature #13904]

svn: r64206 2018-08-06 18:08:30 +0900

r64205 の新規追加ファイルの svn property 設定。