ruby-trunk-changes r67193 - r67194

今日はヘッダファイルのマクロ名の間違いの修正だけでした。

tadd: r67193 2019-03-08 09:35:53 +0900

vm_exec.h の preprocessor の分岐で __GCC__ というマクロが利用されてましたが __GNUC__ に変更されています。ちょっと調べてみた限りこんなマクロはなさそうなので純粋に間違いみたいですが、ここの分岐ではどっちにせよ同じ定義されてているので問題にならなかったようです。っていうかこれ分岐やめていいのでは…。TODO コメントがあるから将来的になにかうやる予定があったのかも。

svn: r67194 2019-03-08 09:35:56 +0900

version.h の日付更新。

ruby-trunk-changes r67187 - r67190

今日は IO#readlines などが CR+LF の改行コードをうまく除去できないケースがあった不具合の修正や rubygems の特殊な状況下での問題の修正などがありました。

nobu: r67187 2019-03-06 20:49:53 +0900

r67185 の変更の影響で __send__ に渡した文字列が Symbol 化されないことをチェックしていたところを dynamic symbol になることをチェックするように変更しています。

nobu: r67188 2019-03-07 14:11:46 +0900

IO#readlines などの行指向 read 系メソッドで chomp オプションに true が指定されていた時に、"\r\n" のような 2バイトの改行コードがちょうど内部のバッファの切れ目で分かれていた時に "\r" が残ってしまう不具合を修正しています。 [ruby-core:91707] [Bug #15642]

svn: r67189 2019-03-07 14:11:55 +0900

version.h の日付更新。

hsbt: r67190 2019-03-07 20:24:48 +0900

rubygems が拡張ライブラリなどを含む gem パッケージを扱う時に RUBY_ENGINE が異なる ruby 実装と GEM_HOME を共有している場合のために他の実装向けのものを無視するようにしています。 CRuby と JRuby で GEM_HOME を共有して重複を避ける、みたいなことをしていると問題があったようです。

ruby-trunk-changes r67169 - r67185

今日は Unicode の 12.0.0 への更新、拡張ライブラリ pty の OpenBSD での不具合修正などがありました。

duerst: r67169 2019-03-06 10:55:19 +0900

Unicode のバージョンをリリースされたばかりの 12.0.0 に更新しています。 Emoji も先月リリースされた 12.0.0 に更新。日本の新年号のぶんの codepoint の予約も入ってると思います。 [ruby-core:89896] [Feature #15321]

svn: r67170 2019-03-06 10:55:26 +0900

version.h の日付更新。

hsbt: r67171 2019-03-06 11:08:20 +0900

r67168 で追加した rubygems の拡張ライブラリを使うテストを mswin で skip するようにしています。

kazu: r67172 2019-03-06 12:04:36 +0900

Travis CI でコンテナバージョンを利用するための sudo: false というオプションはもう不要になってるそうなので .travis.yml から削除しています。

duerst: r67173 2019-03-06 12:15:06 +0900

NEWS ファイルに r67169 の Unicode 12.0.0 への更新について追加しています。 [ruby-core:89896] [Feature #15321]

duerst: r67174 2019-03-06 12:19:10 +0900

Unicode 12.0.0 への更新で不要になった enc/unicode/11.0.0/ の配下のファイル群を削除しています。 [ruby-core:89896] [Feature #15321]

naruse: r67183 2019-03-06 18:48:39 +0900

拡張ライブラリ pty が OpenBSD で PTY.open がエラーになるという不具合を修正しています。 SolarisFreeBSD でも同様の workaround をしていたのですが grantpt() の前に fd に O_CLOEXEC フラグを指定しているとエラーになるので、後でフラグ追加するようにしています。 [ruby-core:91569] [Bug #15607]

nobu: r67185 2019-03-06 20:16:34 +0900

Object#method で Object#respond_to_missing? が true を返した時だけ引数を rb_intern_str() を呼んで ID 化(Symbol 化)してたのをやめて、Symbol をそのまま respond_to_missing? に渡すようにしています。なんかよくわかりませんが dynamic symbol の導入前に GC できない Symbol がメモリを圧迫しないようにした workaround だけどもう不要なので消そうってことみたいです。 [ruby-core:91683] [Bug #15640]

ruby-trunk-changes r67165 - r67168

今日は rubygems の更新などがありました。
今日は rubygems の複数の脆弱性修正を含むリリースがありました。各安定版の ruby 本体のリリースはまだなので rubygems を更新しましょう。

https://www.ruby-lang.org/en/news/2019/03/05/multiple-vulnerabilities-in-rubygems/

nobu: r67165 2019-03-05 09:28:22 +0900

rubyspec の RbConfig のテストで RbConfig::CONFIG['rubylibdir'] の確認を mingw で除外していたのを RbConfig::TOPDIR の定義の有無で判定するようにしています。他の環境でも install してないとディレクトリが存在しないため。make install してないと RbConfig::TOPDIR は nil になります(そもそもパスを通して rbconfig.rb をロードしないと RbConfig がない)。

svn: r67166 2019-03-05 09:28:25 +0900

version.h の日付更新。

nobu: r67167 2019-03-05 09:32:15 +0900

String#force_encoding した時に実際には valid なバイト列なのに valid_encoding? が false になってしまうケースがある不具合を修正しています。 [ruby-core:91662] [Bug #15635]

hsbt: r67168 2019-03-05 12:32:58 +0900

rubygems を upstream の最新版に更新しています。今日 rubygems の複数の脆弱性修正を含むリリースがあったので、それを trunk に反映させています。 https://blog.rubygems.org/2019/03/05/security-advisories-2019-03.html

ruby-trunk-changes r67162 - r67164

今日は Windows で UNC path に対する File.expand_path が遅いという問題の修正などがありました。

k0kubun: r67162 2019-03-03 22:35:25 +0900

aruze-pipelines.yml で vs2019 でのビルド時にも checkout のオプションに fetchDepth:1 を追加してリポジトリ checkout を高速にするようにしています。

nobu: r67163 2019-03-04 17:13:25 +0900

Windows 環境での File.expand_path が UNC path (\\ と delimiter 2つで始まるパス)の時に遅いというのを修正しています。 replace_to_long_name() という省略形の path (Windows だと DOS との互換性? のために長いファイル名を XXXXXX~1 みたいに拡張子を除いて8文字におさめる短い名前も割り当てられる)を解決する処理で UNC の場合には省略形は使えないみたいなので、処理をスキップするようにしています。 [ruby-core:91656] [Bug #15633]

svn: r67164 2019-03-04 17:13:27 +0900

version.h の日付更新。

ruby-trunk-changes r67159 - r67161

今日は Dir.glob がリソース不足で fd 開くのに失敗する時に GC で回収を試みる挙動のテストの失敗の可能性を減らす修正などがありました。

ko1: r67159 2019-03-03 09:17:18 +0900

Dir.glob で fd がプロセスの開ける fd 数上限に達した時に GC して fd の回収を試みることをチェックするテストで、後で close するために配列に IO を保存しておいて ensure で閉じるようにしてるんですけど、これだと GC されなくなっちゃうからだめなんじゃないかな。それにここは子プロセスで実行しているので。 テストが Errno::EMFILE でこけてるので setrlimit の設定がおかしいのかな…。と思ったけどよくみると open するところは最初に Errno::EMFILE が発生するぎりぎりまで実施するようにしているので、または保守的 GC なので偶然 IO が GC で回収されない状態になってしまったか、ということではないかなぁ。Enumerable#map は内部的に Array オブジェクトを作ってそこに要素を詰めていきますが、この内部的に確保された Array は途中で例外発生して抜けたら不要になりますが要素を持ったまま GC されるのを待つわけですが、たまたまこの 1つの Array が回収されなかったら、この Array に入ってる全要素も参照されていると判定されて回収されないので、このブロック内で開いた IO 全部が回収されないという悲劇が起きるのではないかなぁ。

svn: r67160 2019-03-03 09:17:21 +0900

version.h の日付更新。

ko1: r67161 2019-03-03 15:18:43 +0900

というわけで報告して r67159 のテスト再修正して、map で IO の参照を(最内の tap のブロック抜けるまでは)保持させるようにしてたのをやめて each で明示的に配列に詰めておいて、その配列を明示的に clear するようにしています。これで問題の環境でのテストも通ったようです。

ruby-trunk-changes r67157 - r67158

今日は Azure Pipelines や Werker でのビルドの設定の変更だけでした。

hsbt: r67157 2019-03-01 22:16:29 +0900

azure-pipelines.yml の vs20xx (Windows かんきょう )のビルド時に vcpkg で readline もインストールして readline 拡張ライブラリもビルド対象にするようにしています。

k0kubun: r67158 2019-03-01 23:09:41 +0900

werker.yml で --jit-wait つきの時の test-all を細かくテストをファイルやディレクトリ単位で指定した make test-all 実行に分けてたのをやめています。そしてオプションに --test-order=random を渡して実行順序を毎回入れかえるようにしています。分割していると時間がかかりすぎて Werker がタイムアウトしてしまうためとのこと。