ruby-trunk-changes r46216 - r46225

今日もテストの fd leak の修正や、ライブラリ等での主に例外発生時の fd の閉じ忘れの修正などがありました。

akr: r46216 2014-05-29 00:06:39 +0900

OpenSSL のテスト test/openssl/test_pair.rb でソケットの閉じ忘れを修正しています。

svn: r46217 2014-05-29 00:06:43 +0900

version.h の日付更新。

akr: r46218 2014-05-29 00:42:09 +0900

拡張ライブラリ socket で UNIXSocket を作成する時にファイルパス(UNIX ソケットのアドレス)の長さのチェックを実行する前に socket(2) で file descriptor を確保してしまって、例外発生時に閉じていなかったので、パスのサイズチェック後に socket を開くようにしています。テストの file descriptor leak チェックで発見されたようですね。 [Bug #9879]

normal: r46219 2014-05-29 05:08:56 +0900

r45426 の Symbol GC で導入した struct RSymbol 型の宣言を include/ruby/ruby.h から internal.h に移動して非公開にしています。最近はオブジェクトの内部構造はあまり公開しないようにするような方針になっているみたいですね。

akr: r46220 2014-05-29 07:59:07 +0900

test/socket/test_unix.rb でブロックパラメータによるローカル変数の shadowing の警告除去。

nobu: r46221 2014-05-29 08:35:43 +0900

r46202 の Mac OS X での filesystem encoding を default external が US-ASCII の時に強制的に UTF-8 にしてたのを revert しています。やっぱり何か悪影響があったみたいですね。

nobu: r46222 2014-05-29 09:58:21 +0900

r45608 の configure.in の変更で AC_CACHE_CHECK() のメッセージを詳細になるように変更しています。この元の変更よくわからなかったんですよね。 autoconf 難しい。

akr: r46223 2014-05-29 19:32:19 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLServer#accept で例外発生時に OpenSSL::SSL::SSLSocket で wrap 済みだったらそちらから閉じるようにしています。 これは元々 socket は閉じていたので、OpenSSL::SSL::SSLSocket の後始末がされるようにしているのかなぁと思います。 OpenSSL::SSL::SSLSocket#close は定義されていないなぁと思ったら、OpenSSL::Buffering#close で定義されていて、そこから OpenSSL::SSL::SSLSocket#sysclose が呼ばれていて、ここで ossl_ssl_shutdown() の呼び出しや SSL 型のメモリ領域の解放などが行われています。
また openssl のテストの socket の閉じ忘れの修正などが含まれています。

akr: r46224 2014-05-29 19:44:59 +0900

拡張ライブラリ csvCSV.open で CSV.new で例外が発生した時に開いた File オブジェクトは close するようにしています。

akr: r46225 2014-05-29 20:29:47 +0900

IO.pipe で pipe を生成する時に pipe(2) で file descriptor を生成した後で io_encoding_set() で Encoding を関連付ける際に例外が発生する可能性があり、その時に file descriptor が leak するので rb_protect() で保護して大域脱出(例外など)が発生した時には close するようにしています。
また IO のテストで IO.pipe を利用しているところで閉じていないものやエラー時に閉じられない可能性があるところを修正しています。