ruby-trunk-changes r64337 - r64357

今日は Module#method_defined? に省略可能な inherit 引数を追加する変更や、timer thread を廃止する変更のリトライなどがありました。

usa: r64337 2018-08-13 21:42:03 +0900

Module#method_defined? に省略可能な引数 inherit を追加して継承したメソッドを含めるかどうかを指定できるようにしています。理路整然としたチケットだなぁ。 [ruby-core:88140] [Feature #14944]

svn: r64338 2018-08-13 21:42:04 +0900

r64337 の行末の空白を除去しています。

usa: r64339 2018-08-13 21:42:55 +0900

tool/redmine-backporter.rb の show コマンドで表示するメッセージを組み立てるための StringIO に UTF-8 の Encoding を設定しておくようにしています。メッセージ内容によっては Encoding 変換のエラーが起きてたみたいです。

kazu: r64340 2018-08-13 22:27:47 +0900

r64337 の Module#method_defined? の省略可能引数の追加を revert しています。CI が失敗してたのかな?

kazu: r64341 2018-08-13 22:27:49 +0900

r64337 の Module#method_defined? の引数追加とその revert と絡んでるとだと思いますが、拡張ライブラリを使ったテストの test/-ext-/test_notimplement.rb で Bug.method_defined? のテストを追加しています。CI の調査用かな?

k0kubun: r64342 2018-08-13 22:46:06 +0900

appveyor.yml で matrix と for の使いかたが間違ってたそうなのでその修正と、version という項目の指定を追加しています。MinGW でのテストも追加しようとしているそうです。

usa: r64343 2018-08-13 22:48:27 +0900

r64340 で revert された r64337 を再適用して me->def->type が VM_METHOD_TYPE_NOTIMPLEMENTED が明示的に設定されてた時の対応を追加しています。

kazu: r64344 2018-08-13 22:50:48 +0900

r64341 で追加したテストはテスト用拡張ライブラリに Bug::NotImplement という Module を追加してこちらを使うように修正しています。

usa: r64345 2018-08-13 23:29:21 +0900

Module#method_defined? や {private,protected}_method_defined? のテストを追加しています。

usa: r64346 2018-08-13 23:33:06 +0900

r64337 の Module#method_defined? の引数追加について NEWS に追記しています。

kazu: r64347 2018-08-13 23:54:32 +0900

r64346 の typo 修正。

k0kubun: r64348 2018-08-14 00:29:40 +0900

appveyor.yml の matrix に MinGW でのビルドを追加しています。

svn: r64349 2018-08-14 00:29:41 +0900

version.h の日付更新。

k0kubun: r64350 2018-08-14 01:03:47 +0900

r64348 の追加修正。 MinGW での gdbm のビルドのため mingw-w64-x86_64-gdbm というパッケージ? をインストールするようにしています。

naruse: r64351 2018-08-14 04:12:23 +0900

r64331 や r64332 で addr2line.c で libz が使える時だけ圧縮に対応するようにしていましたが、FreeBSD 11.0 では libz はあっても ELF の圧縮形式? には未対応のため、ELFCOMPRESS_ZLIB というマクロも追加でチェックしてこれがないと圧縮されたデバッグセクションはサポートしないようにしています。

normal: r64352 2018-08-14 06:34:20 +0900

timer thread の削除を r64203 で一旦あきらめて revert していましたが、またリトライするみたいです。とりあえずこのコミットは r64203 を revert して元の状態に戻しているだけみたいです。続く変更で不具合を修正するとのこと。 [ruby-core:88360] [Misc #14937]

normal: r64353 2018-08-14 06:34:24 +0900

r64352 に続いて timer thread の廃止の修正。 GVL 解放してブロックする処理に入る前にシグナルを受信してしまうと割り込みチェックの前にブロック処理に入って起床しなくなるという問題を解決するための修正のようです。 まず Thread のなかで timer thread としての役割を受け持つ thread で、利用可能であれば timer_settime(2) システムコールを用いた定期的なシグナル送信を行うようにしています。また gvl_yield() 時に常に blocking 中のスレッドを起こすようにしています。なんか前も思いましたが Thread が多い時には timer thread がないかわりに全スレッドが定期的に起こされるので若干負荷が上がりそうな気がするんですがどうなんでしょう。 [ruby-core:88360] [Misc #14937]

normal: r64354 2018-08-14 07:19:54 +0900

r64353 の再修正。 rb_timer_arm() で timer_settime(2) を使ったタイマーセットするところで、既に他の thread でも呼ばれていたのを検出した時に異常終了してましたが、これはありえるので許容するようにしています。 [ruby-core:88360] [Misc #14937]

normal: r64355 2018-08-14 09:31:31 +0900

timer thread の廃止で拡張ライブラリ fiddle のテストが失敗していたのを謎の IO.select を追加して回避するようにしています。timer を止めるための hack だそうです。うーん? なんか怪しくなってきたぞ。 [Bug #14968] [ruby-core:88360] [Misc #14937]

normal: r64356 2018-08-14 11:24:37 +0900

r64353 の timer thread の廃止の修正で timer_settime() に使ってた CLOCK_MONOTONIC が Solaris 環境だとないということで、かわりに CLOCK_REALTIME を使うようにマクロ UBF_TIMER_CLOCK を導入しています。 [ruby-core:88360] [Misc #14937]

normal: r64357 2018-08-14 15:49:25 +0900

r64356 で Solaris でも timer_settime(2) を使うほうを有効にしていましたが、CI での rubyspec の失敗が解決できないので timer thread を使う方式にしています。