ruby-trunk-changes r65304 - r65318

今日は昨日に続いて call cache や inline cache を MJIT worker 用にコピーする機構の修正やテストの整備が行なわれてました。

kazu: r65304 2018-10-22 21:21:19 +0900

Solaris での CI の drb のエラーをチェックするため drb のテストで起動するサーバーで solaris 上で SSLSocket を使うものの時に rubyコマンドラインオプションにデバッグ用に -dv を追加するようにしています。

nobu: r65305 2018-10-22 22:53:20 +0900

time.c の Time::TM の subsec, utc_offset, isdst などの実装を常に固定の値 (0 や false)を返す実装を TM_IS_TIME が偽の時に追加するようにして、TM_IS_TIME を 0 に #define するようにしています。 CI のデバッグ用かな?

nobu: r65306 2018-10-22 22:56:41 +0900

確認が終わったからか r65305 の TM_IS_TIME の定義を 1 に戻しています。

nobu: r65307 2018-10-22 23:02:59 +0900

time.c の Time::TM#initialize の実装で Struct のメンバーにない値のセットが残ってたのを削除しています。たぶんこの不具合をみつけるために r65305 のダミー実装をやったのかな。

k0kubun: r65308 2018-10-22 23:26:47 +0900

r65292 と r65297 で MJIT 有効時に skip するようにしたテストを実行するように戻しています。

k0kubun: r65309 2018-10-23 00:19:34 +0900

String#crypt のテストを MJIT 有効時に skip するようにしています。メッセージによると assert_no_memory_leak が MJIT worker thread によるメモリ使用を leak と誤検出するんじゃないかってことです。同様のメッセージを IO#select のテストの skip にも追加しています。

svn: r65310 2018-10-23 00:19:36 +0900

version.h の日付更新。

k0kubun: r65311 2018-10-23 00:49:22 +0900

他にも MJIT 有効時に skip してたテストを実行するようにしたり、skip しているところもコメントを追加しています。

k0kubun: r65312 2018-10-23 09:09:10 +0900

r65275 で導入して r65299 あたりで修正してた inline cache や call cache を main thread にコピーを依頼する機構で main thread でコピー実施する関数 mjit_copy_job_handler() でコピー先のメモリにアクセスする前に stop_worker_p で停止要求が出てないかチェックするようにしています。このフラグが立ってたら MJIT worker のほうで関数を抜けて alloca() で確保したスタック領域は不正になっている可能性があるので。

k0kubun: r65313 2018-10-23 09:19:53 +0900

wercker.yml を追加しています。 Wercker っていう CI サービスがありましたね(今もあるんだけど最近あまりきかなかった)。MJIT のテストを k0kubun さんのリポジトリで流していたみたいなので、それを統合しようとしているようです。

k0kubun: r65314 2018-10-23 09:27:08 +0900

r65313 で追加した wercker.yml ですが、まだうまく動かないみたいなので準備ができるまでコメントアウトするようにしています。

k0kubun: r65315 2018-10-23 10:13:38 +0900

r65309 でも skip してた assert_no_memory_leak が MJIT 有効時に worker のメモリ仕様のせいで誤検出するというやつを、個別のテストメソッドでやるのではなくて assert_no_memory_leak のメソッドの先頭で skip するようにしています。

normal: r65316 2018-10-23 12:47:45 +0900

r63451 で rb_vm_t のメンバー postponed_job_buffer の型を st_table に変えてましたが、rb_postponed_job_register() や rb_postponed_job_register_one() は async-signal-safe でないといけないので、この中で st_add_direct() とかメモリ確保するものは実行しちゃだめだったとのこと。 [ruby-core:89521] [Bug #14867]

svn: r65317 2018-10-23 12:47:48 +0900

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

k0kubun: r65318 2018-10-23 21:01:34 +0900

r65279 で call cache をコピーしたものを使うようにしたのですが r65280 で cc_copy へ cc を代入してた余計なコードを消した結果コピーしたものを使わず元の cc を使ってしまっていたので修正しています。なんてこったい。