ruby-trunk-changes 2020-05-06

今日は標準添付ライブラリ uriLDAP schema の URI でのエラー処理強化や uri のテストでの fd leak 対策などがありました。

[e04418bb16] Nobuyoshi Nakada 2020-05-05 14:23:39 UTC

標準添付ライブラリ uriURI::LDAP (こんな schema 対応あったんだ)で path がない時に URI::InvalidURIError 例外を発生させるようにしています。 [ruby-core:98138] [Bug #16830]

[77f19d26b9] Marc-Andre Lafortune 2020-05-01 07:36:50 UTC

標準添付ライブラリ matrix の gemspec ファイルの spec.files から .travis.yml を削除しています。

[7bde98125e] Marc-Andre Lafortune 2020-05-05 21:02:59 UTC

Enumerator#next の rdoc 用コメントのエントリに #next_values, #peek, #peek_values と共通の注意事項をまとめたり Fiber を実装に使っているために速度は遅くなることはバックトレースが独自のものになる点などを追記しています。

[86391a5517] git 2020-05-05 21:04:39 UTC

version.h の日付更新

[00a9d697a8] Benoit Daloze 2020-05-05 22:09:56 UTC

rb_obj_cmp() から VALUE 値を直接比較するショートカットを削っています。 rb_equal() でも比較してるからということですが、これは関数呼び出しをショートカットするためだったんじゃないかな。

[48d509cefc] Benoit Daloze 2020-05-05 22:11:42 UTC

Kernel#=== メソッドの実装の関数を case_equal() という rb_equal() を呼び出すだけの関数に変更して、rb_equal() のコメントに VALUE 値を直接比較する最適化が行なわれるために、この C API を直接呼び出すと Float::NAN 同士の比較が真になってしまうなどのちょっと equal? メソッドとは異なる結果になる場合があるという注意を追記しています。

[e79e5e0b40] Benoit Daloze 2020-05-05 22:24:29 UTC

48d509cefc376df8af0ad0e08a09aecbd78f4f10 の rb_equal() に追加したコメントの注意事項の説明をもうちょっと詳しくしています。

[b0498caa7e] Nobuyoshi Nakada 2020-05-06 00:43:49 UTC

48d509cefc376df8af0ad0e08a09aecbd78f4f10 で case_equal() を rb_equal() を呼び出す関数として定義していたのをただのマクロとして置換させるようにしています。

[3a6dad9d8b] Nobuyoshi Nakada 2020-05-06 00:51:01 UTC

Object#== の rdoc 用コメントから不要になった部分を削っています。

[039a8ef786] Nobuyoshi Nakada 2020-05-06 01:09:29 UTC

テスト中の各種リソースのリークチェックする tool/lib/leakchecker.rb で自プロセスが開いている file descriptor を取得するために使う procfs のパスに /proc/self/fd の他に /dev/fd というのも試してみるようにしています。

[7397b9f786] Nobuyoshi Nakada 2020-05-06 03:45:01 UTC

拡張ライブラリ socket の UNIXSocket のテストで後始末が漏れていて fd leak していたのを修正しています。

[b247ac086e] Nobuyoshi Nakada 2020-05-06 04:13:10 UTC

tool/lib/leakchecker.rb の fd leak チェックで getaddrinfo() を使うと macOS ではシステム側で fd が利用されてしまうようなので device 番号で判定して無視するように対応しています。

[de3f725978] Nobuyoshi Nakada 2020-05-06 05:08:26 UTC

b247ac086e60a6cee99ea1989277c5c66b0541de で leak fd を一時的に IO.for_fd で IO オブジェクトで wrap したものを close する時に何らかの理由で IO.for_fd が失敗して io が nil だった時に対応するため safe guard 演算子を使うようにしています。

[46b93175ed] Nobuyoshi Nakada 2020-05-06 07:06:25 UTC

b247ac086e60a6cee99ea1989277c5c66b0541de で対処したように macOS では IPSocket.getaddress を呼ぶことでシステムライブラリ内で fd を使ってしまうので URI() の http_proxy オプションのテスト一部の assertion 用の with_proxy_env ブロック内で IPSocket.getaddress を mock にすりかえていたのを、テストメソッド全体で行うようにしています。