ruby-trunk-changes r46227 - r46263

今日も主にテスト(と時々ライブラリ自体の)Thread や file descriptor の leak の修正がありました。また String の部分文字列を作って共有文字列になった時の coderange の不具合の修正がありました。

akr: r46227 2014-05-29 21:07:39 +0900

fileutils のテストで pipe の閉じ漏れの修正。

akr: r46228 2014-05-29 21:42:14 +0900

拡張ライブラリ io/nonblock のテストでの pipe の閉じ漏れの修正。

akr: r46229 2014-05-29 22:12:38 +0900

logger のテストでの Logger::LogDevice の閉じ忘れ修正。

akr: r46230 2014-05-29 22:26:02 +0900

test/lib/minitest/unit.rb で並列実行時の子プロセスの出力を格納するために $stdout, $stderr を dup した IO オブジェクトを閉じるようにしています。

akr: r46231 2014-05-29 22:38:39 +0900

pty のテストでも pipe の閉じ忘れを修正しています。

akr: r46232 2014-05-29 23:13:20 +0900

IO.popen のテストの close 忘れの修正および、IO.popen で pipe を開いた後 rb_execarg_fixup() で例外が発生する可能性があり、fd がリークしていたので rb_protect() で大域脱出を捕捉して閉じるようにしています。

nobu: r46233 2014-05-29 23:27:53 +0900

ruby_signal() で元のハンドラを返すのに常に struct sigaction::sa_handler を返していたのを、sa_flags に SA_SIGINFO フラグが立っていたら struct sigaction::sa_sigaction を返すようにしています。 SA_SIGINFO ってなんだっけとみてみると、ハンドラを取得するためにセットするフラグみたいですね。 参考: http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/sigaction.2.html [ruby-core:62836] [Bug #9878]

akr: r46234 2014-05-29 23:47:28 +0900

readline のテストでも STDERR を dup した IO オブジェクトを閉じ忘れていたところを修正。

akr: r46235 2014-05-29 23:59:24 +0900

Syslog のテストでの pipe の閉じ忘れの修正。

usa: r46237 2014-05-30 00:45:25 +0900

VC++ による未初期化変数の警告抑制のため thread.c、vm.c、vm_trace.c で変数の初期化を追加しています。

svn: r46238 2014-05-30 00:45:29 +0900

version.h の日付更新。

normal: r46239 2014-05-30 04:49:22 +0900

gc.c の rb_gc_mark_parser() はからっぽの関数だったので呼び出しているところも一緒に削除しています。

akr: r46240 2014-05-30 07:28:47 +0900

test/lib/minitest/unit.rb で file descriptor の leak チェックのために Dir.entries を使っているところで Dir オブジェクトによる fd もカウントされてしまうので、Dir.open do ... end を使って閉じるようにした上でテスト用の拡張ライブラリに Dir#fileno の実装を追加して、検出のために開いた Dir オブジェクトのぶんは除くようにしています。

nobu: r46241 2014-05-30 10:22:23 +0900

標準添付ライブラリ erb の ERB#result の rdoc 用コメントに引数に Proc オブジェクトが渡せると古い情報が書いてあったのを修正しています。 https://github.com/ruby/ruby/pull/619

nobu: r46242 2014-05-30 11:32:37 +0900

test/ruby/test_beginendblock.rb のテストメソッドで起動した Thread の終了を待つようにしています。

nobu: r46243 2014-05-30 11:33:38 +0900

String#slice などで部分文字列を切り出して共有文字列を作った時に coderange の再スキャンをしていなかったため String#hash の値が同じ内容の String 文字列のものと違ってしまっていたのを修正しています。 [ruby-core:62842] [Bug #9882]

nobu: r46244 2014-05-30 11:55:26 +0900

r46243 で追加した assertion を別のテストメソッドに移動して、String#ascii_only? で coderange をチェックするようにしています。 [ruby-core:62846]

naruse: r46245 2014-05-30 12:06:47 +0900

test/lib/test/unit/parallel.rb ですりかえた $stdin, $stdout を元の IO オブジェクトに戻す時に、すりかえ前で例外が発生した場合は nil で上書きしてしまわないようにしています。

nobu: r46246 2014-05-30 12:18:07 +0900

ext/-test-/printf/printf.c の未初期化の変数の初期化を追加して警告除去しています。

nobu: r46247 2014-05-30 12:18:08 +0900

r46240 で追加したテストで使うための Dir#fileno の実装の rb_check_typeddata0() という関数は HAVE_DIRFD が未定義の時は使われないので #ifdef HAVE_DIRFD でくくるようにしてコンパイラの警告除去をしています。

nobu: r46248 2014-05-30 15:27:23 +0900

これも r46240 で追加したテスト用の Dir#fileno とそれを利用した minitest の fd leak 検出の修正で、Dir#fileno の実装を追加したテスト用拡張ライブラリは procfs や sysfs で /proc/self/fd を使って検出可能な時だけ require するようにしています。

naruse: r46249 2014-05-30 17:52:58 +0900

test/lib/test/unit/parallel.rb の test-unit の並行実行時に子プロセスから pipe 経由で読み込んだ文字列を ASCII-8BIT のエンコーディングに設定しておくことで Encoding::CompatibilityError が発生することがあるのを回避しているそうです。

akr: r46250 2014-05-30 18:08:23 +0900

minitest での file descriptor leak のチェックの前に GC.start して開きっぱなしの fd が回収されやすいようにしています。

akr: r46251 2014-05-30 21:01:09 +0900

minitest で leak している file descriptor の表示をソートして表示するようにしています。

akr: r46252 2014-05-30 21:03:40 +0900

ext/-test-/dir/ の svn:ignore property に svn に無視させるファイルを追加しています。

akr: r46253 2014-05-30 21:32:48 +0900

標準添付ライブラリ webrickWEBrick::GenericServer で shutdown メソッドで socket を IO#shutdown/IO#close するだけだと IO.select が検出してくれない場合もある(DragonFly BSD 3.6.2 がそうらしい)ので、終了通知用の pipe を作っておいて、shutdown 時にこの pipe に書き込んで socket を監視しているスレッドに終了を通知するように変更しています。

akr: r46254 2014-05-30 21:51:49 +0900

拡張ライブラリ io/console の PTY.spawn のテストでの IO 閉じ忘れを修正しています。

akr: r46255 2014-05-30 22:28:39 +0900

拡張ライブラリ io/console のテストで起動した Thread の終了を待つようにしています。

akr: r46256 2014-05-30 22:48:06 +0900

拡張ライブラリ io/wait のテストでも起動した Thread の終了を待つようにしています。

akr: r46257 2014-05-30 23:06:39 +0900

rake のテストで Open3.popen3 のブロック付きの呼び出しを利用して pipe の閉じ忘れがないようにしています。

akr: r46258 2014-05-30 23:17:46 +0900

test/unit 自体のテストでも pipe の閉じ忘れを修正しています。

akr: r46259 2014-05-30 23:28:44 +0900

xmlrpc のテストでソケットの閉じ忘れを修正しています。

akr: r46260 2014-05-30 23:50:42 +0900

WEBrick のテストで pipe の閉じ忘れがないようにブロックつきの IO.pipe を利用するように修正しています。

akr: r46261 2014-05-31 00:03:34 +0900

net/http のテストでソケットの閉じ忘れを修正しています。

svn: r46262 2014-05-31 00:03:40 +0900

version.h の日付更新。

naruse: r46263 2014-05-31 00:06:07 +0900

マシンスタックオーバフローの検出のテストで起動する子プロセスに --disable-gem オプションを付けるようにしています。 このテストたまに CI で失敗しているのをみるので、その時のメッセージのみやすさの為かなにかでしょうか。