ruby-trunk-changes r63572 - r63591

今日は主に Net::HTTP に write_timeout オプションの追加や、DTrace のテストで System Tap を使ったテストも実行するようにする変更などがありました。

ngoto: r63572 2018-06-05 23:16:50 +0900

r63571 の再修正で Solaris の……に限らないのかな? C++コンパイラ以外ではそもそも __cplusplus マクロがないかもしれないので defined() でのチェックも追加しています。 [ruby-core:87364] [Bug #14816]

normal: r63573 2018-06-06 04:53:09 +0900

gc.c の実装の on/off をする GC_ENABLE_INCREMENTAL_MARK, GC_ENABLE_LAZY_SWEEP のマクロでの preprocessor の #if の分岐を消したり移動したりしています。これから別の分岐を入れるつもりなので汚くなるからとのこと。

svn: r63574 2018-06-06 04:53:10 +0900

version.h の日付更新。

normal: r63575 2018-06-06 05:16:21 +0900

gc_start() や garbage_collect() の引数に full_mark, immediate_mark, immediate_sweep などのフラグを渡していたのを gc_profile_record_flag の bit flag の中に入れてまとめて渡すようにリファクタリングしています。 引数の順番がわけわからんのじゃ、とのこと。 [ruby-core:87311] [Misc #14798]

normal: r63576 2018-06-06 05:46:56 +0900

IOV_MAX が未定義の環境でビルドできなかったためチェック部分を iovcnt_ok() という関数に切り出し未定義だったら常に OK にしています。常に OK でいいのかな。まあないんだからしょうがないか。 GNU/Hurdコンパイルできないという骨太なチケットでした。 [ruby-core:87417] [Bug #14827]

normal: r63577 2018-06-06 06:19:31 +0900

DTrace のテストの helper で子プロセスとして ruby を起動するときのコマンドラインの構築で、miniruby じゃなかった時のため(RbConfig::TOPDIR はインストール先を指してるので普通 miniruby はないとある) --disable=gems オプションを付けるようにしています。

normal: r63578 2018-06-06 06:19:36 +0900

DTrace 機能のテストで生成する probe ファイルをちょっといじってます。arg2 もチェックするようにしているけど arg2 が lineno なのかな。ちょっとよくわからないです。

normal: r63579 2018-06-06 06:19:40 +0900

r63578 と同様に DTrace のテストで生成する probe ファイルのマッチ条件に arg2 を含めるように弄ってます。

normal: r63580 2018-06-06 06:19:45 +0900

同じく DTrace 機能のテストで r60763 あたりの trace 命令の除去からデフォルトでは trace が動かなくなっていたのでテストが失敗してたっぽいのを修正しているようです。 [ruby-core:85965] [Bug #14582]

normal: r63581 2018-06-06 06:19:50 +0900

test/dtrace/helper.rb で DTrace と SystemTap の両方に対応するようにしているようです。しかしコマンド差し替えても SystemTap 用の stub は DTrace と互換性あるんだっけ? なんか文法がすごい独特だって昔きいたような。と、思ったけど dtrace2systemtap というメソッドが定義されてて、単純な置換で変換できるみたいです。すごい。

normal: r63582 2018-06-06 07:01:43 +0900

encoding.c に rb_gc_mark_encodings() という空っぽの関数がありましたが、もう不要なので削除して呼び出しも消しています。

normal: r63583 2018-06-06 07:28:49 +0900

拡張ライブラリ io/console のテストで FreeBSD ではシグナル SIGTTOU が発生することがあるとのことで、一時的にシグナルハンドラを追加して無視させるようにしています。

normal: r63584 2018-06-06 07:32:41 +0900

MJIT のテストで出してる警告メッセージの typo 修正。

normal: r63585 2018-06-06 10:12:23 +0900

拡張ライブラリ io/console のテストで PTY が未定義の時に除外する範囲に r63583 の SIGTTOU のシグナルハンドラ設定が入ってしまっていたので修正しています。 [ruby-core:87420] [Bug #14828]

yui-knk: r63586 2018-06-06 15:14:21 +0900

テスト用の拡張ライブラリから昇格した ast.c ですがインデントにタブと空白が混じっていたので空白に統一しています。ちょっと前にこれからいじるところは空白インデントにそろえようってことになったんでしたね。 [Bug #14246]

naruse: r63587 2018-06-06 17:03:47 +0900

Net::HTTP のオプションに write_timeout を追加しています。これまでも open_timeout と read_timeout はありましたがソケットへの書き込みのタイムアウトというのはなかったのですね。あまり、書き込みでブロックすることはなさそうだけど。 [ruby-core:80542] [Feature #13396]

ko1: r63588 2018-06-06 17:34:39 +0900

r63587 で Net::HTTP の write_timeout の導入しましたがテストが通らないとのことで Net::BufferedIO#write0 で write_nonblock への引数の渡しかたを修正しています。IO 以外(OpenSSL::SSL::SSLSocket とか?)で複数の引数を渡すのに対応していないケースがあったのかな。

naruse: r63589 2018-06-06 17:39:36 +0900

r63588 の追加修正で引数の strs の各要素の文字列1つずつ write_nonblock に渡してループを回すように書き直しています。

naruse: r63590 2018-06-06 18:01:04 +0900

標準添付ライブラリ net/http の Net::HTTPServerException という例外クラス名を deprecated にして、かわりに Net::HTTPClientException という別名を追加しています。あと Net::ProtoServerError も deprecated にされていますね。 HTTP のステータスコードで 400系は Server Error ではなく Client Error なのに例外クラス名がマッチしてない、ということみたいです。 [ruby-core:86545] [Bug #14688]

naruse: r63591 2018-06-06 21:13:16 +0900

r63590 の追加修正。 lib/net/http/responses.rb に Net::HTTPServerException を参照しているところが残っていたので Net::HTTPClientException を使うように修正しています。