ruby-trunk-changes r64230 - r64254

今日は主に rubyspec の socket のテストの FreeBSD などの一部のプラットフォーム向けの対応や Windows での ARGF のファイル名のエンコーディングの扱いの修正、net/ftp と net/http の TLSv1.3 の時の session resumption 対応などがありました。

akr: r64230 2018-08-08 21:48:58 +0900

time.c の struct time_object::tzmode を操作するマクロたちを TIME_XXX から TZMODE_XXX という感じに改名しています。

naruse: r64231 2018-08-08 22:44:25 +0900

rubyspec の Signal.trap についてのテストの spec 名にコロンを追加。どうやら chkbuild がいくつかのシグナルによる終了をメッセージから検出してカウントしているので、そこで誤検出されないようにしているみたいです。 https://github.com/ruby/chkbuild/blob/c0448670a9a5cb85f283bc639806ba09b294557f/chkbuild/ruby.rb#L847

naruse: r64232 2018-08-08 22:50:25 +0900

rubyspec の socket の MSG_OOB を使った送受信のテストで accept する前の listen socket に setsockopt() で OOBINLINE をセットしてましたが、accept でできた socket のほうにつけるように修正しています。使いかたが間違ってたのか。r64223 の一部の FreeBSD で先に close する対応は削除しています。

rhe: r64233 2018-08-08 23:13:53 +0900

拡張ライブラリ openssl に upstream のリポジトリの変更をマージしています。 https://github.com/ruby/openssl/compare/v2.1.1...62436385306c PKCS7 の改善や mswin 版のビルドの修正などがあったようです。

rhe: r64234 2018-08-08 23:13:55 +0900

標準添付ライブラリ net/ftp と net/http に TLS 1.3 対応。TLS 1.3 では OpenSSL::SSL::SSLContext に session_new_cb というコールバック用 Proc オブジェクトをセットしておいて session オブジェクトを取得する必要があるみたいなのでそれに対応しています。

nobu: r64235 2018-08-08 23:34:24 +0900

r64182 で MJIT の mswin 以外のプラットフォームで min header 生成するための make のルールを common.mk から Makefile.in に移動しましたが、再度 common.mk に戻しています。よくわかってないですが universal binary 生成のために defs/universal.mk で上書きするマクロを使っているルールなので common.mk にないといけないとのこと。

nobu: r64236 2018-08-09 00:36:28 +0900

r64101 で LibreSSL でビルドした時の警告除去のためのオプション追加のために extconf.rb に追加した条件分岐で LIBRESSL_VERSION_NUMBER マクロのチェック時に openssl/opensslv.h を #include してチェックするようにしています。

svn: r64237 2018-08-09 00:36:29 +0900

version.h の日付更新。

normal: r64238 2018-08-09 11:14:27 +0900

テストの Thread や fd の後始末の漏れを検出するための test/lib/leakchecker.rb で Tempfile で生成した一時ファイルの残りをチェックする時にメモリ上の参照だけでなく実際にファイルが残ってるかもチェックするようにしています。

normal: r64239 2018-08-09 12:32:51 +0900

rubyspec の socket のテストで FreeBSD での loopback インターフェースの挙動の違いを考慮したり IPv6 環境の対応をしたりといった修正をしています。

naruse: r64240 2018-08-09 14:28:33 +0900

rubyspec の socket のテストで bind していない Socket の accept のテストを macOS, FreeBSD, Windows に加えて Solaris 環境でも実施しないようにしています。

nobu: r64241 2018-08-09 16:01:09 +0900

rubyspec の socket のテストで r64239 の FreeBSD 向けの修正を macOS(darwin) でも適用するようにしています。

nobu: r64242 2018-08-09 16:04:45 +0900

r64241 と同様に r64239 の FreeBSD 用の修正を macOS にも適用するようにしています。

nobu: r64243 2018-08-09 17:29:38 +0900

Windows 環境で ARGF のファイル名の Encoding を rb_str_encode_ospath() で OS encoding に変換して処理するようにしています。 -i オプションの処理でマルチバイト文字をもつファイル名を引数に指定した時にうまく処理できてなかったそうです。 [ruby-dev:50607] [Bug #14970]

knu: r64244 2018-08-09 17:40:54 +0900

標準添付ライブラリ ipaddr で parse 時に不正なアドレス文字列で例外を発生させる時に、例外メッセージに入力となったアドレス自体を含めるようにしています。 [ruby-core:42445] [Feature #5987]

kazu: r64245 2018-08-09 17:49:09 +0900

Kernel#open などのメソッドの mode を示す文字列に "x" で O_EXCL を示すという機能を追加しています。 [ruby-core:69568] [Feature #11258]

kazu: r64246 2018-08-09 17:49:10 +0900

r64243 の修正で追加したテストで external encoding が US-ASCII だった場合に skip するようにしています。がまた後で再修正されてます。

normal: r64247 2018-08-09 17:51:22 +0900

拡張ライブラリ io/wait のテストで端末からの入力を待つところのタイムアウトを少し伸ばしています。

normal: r64248 2018-08-09 18:02:32 +0900

拡張ライブラリ io/console のテストで IO#readpartial で入力を全て読めないケースがあるせいで時々エラーになるのを IO#gets で確実に改行まで読み込むように修正しています。

kazu: r64249 2018-08-09 18:36:03 +0900

r64246 の再修正で r64243 のテストで external encoding で skip するのではなくマルチバイト文字を含むファイル名で一時ファイルを作ろうとして失敗したら skip するようにしています。

k0kubun: r64250 2018-08-09 18:58:07 +0900

MJIT 用の worker を停止する RubyVM::MJIT.pause に :wait というオプションの引数を追加して、コンパイル中の MJIT の worker の停止を待つかどうかを指定可能にしています。省略時は待つようにしています。

svn: r64251 2018-08-09 18:58:08 +0900

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

rhe: r64252 2018-08-09 19:00:19 +0900

r64234 で TLSv1.3 の対応のため net/ftp と net/http で OpenSSL::SSL::SSLContext#session_new_cb を利用するようにしたやつに対応するものだと思いますが、net/ftp と net/http のテストで OpenSSL::SSL::SSLContext を使いまわしたら session が再利用されているのを確認するようにしています。ただし OpenSSL 1.1.0h では不具合があってうまく働かないようなので、リンクしている OpenSSL のバージョンによっては skip するようにしています。

k0kubun: r64253 2018-08-09 20:31:41 +0900

process.c と vm.c にそれぞれ個別に書かれてた mjit_enabled や mjit_pause(), mjit_resume() などの宣言を internal.h に移動してい集約しています。 r64250 の mjit_pause() のシグネチャの変更に process.c の宣言が追随してなかったのでそのようなことがないようにまとめています。

k0kubun: r64254 2018-08-09 20:39:07 +0900

mjit_pause() を RubyVM::MJIT.pause のメソッド実装の関数としていましたが、rb_f_exec() からも直接関数を呼んでいて、:wait オプションを省略しているので worker thread の停止を待つようになっていましたが、この時は待たせたくなかったのでメソッド実装の関数は mjit_pause_m() という wrapper 関数を導入して mjit_pause() は int 型でフラグを受け取るインタフェースにするリファクタリングをしています。