ruby-trunk-changes r43112 - r43123

今日は主に IO.pipe や IO.popen を使った時に close_read/close_write での race condition 等の不具合があったのを修正しています。

nobu:r43112 2013-10-02 14:19:00 +0900

IO#close_read 時に rb_io_t fptr の解放処理を呼んでいたのをここでは解放しないようにしています。マルチスレッドで別の Thread から同じ IO を利用している時に解放した領域にアクセスする可能性があったのと、メモリリーク/fd リークの可能性があったのを修正しているとのこと。リークについてはどういうシナリオかよくわかりませんでしたが potential とあるのでやっぱりマルチスレッド時なのかなぁと思います。

svn:r43113 2013-10-02 14:19:05 +0900

version.h の日付更新。

nobu:r43114 2013-10-02 14:20:02 +0900

IO#close_write で rb_io_t fptr を閉じるのと、モードを変更する順番を入れ替えています。先に close してからモードを変更していたので、マルチスレッドで処理している時に write_close と close で競合する可能性があったようです。 ruby-list ML に来ていた IO.pipe についてのメールが発端でしたが本体のバグだったとは、まだこんなの残ってるんですねぇ。 [ruby-list:49598]

naruse:r43115 2013-10-02 15:07:58 +0900

NEWS ファイルに C の型のサイズを取得する RbConfig::SIZEOF について追記しています。 [ruby-core:55638] [Feature #8568]

naruse:r43116 2013-10-02 15:50:47 +0900

r43111 で UNINITIALIZED_VAR() の定義のために clang のバージョンをチェックしていたのを __has_attribute() というマクロを利用するように書き変えています。 clang の拡張の有無をバージョンでチェックしないようにとのこと。 参考URL: http://clang.llvm.org/docs/LanguageExtensions.html

nobu:r43117 2013-10-02 16:26:54 +0900

IO#close_read を popen で作った読み書きの fd が異なる IO オブジェクトのに対して呼んだ時に子プロセスを待たなくなってしまっていた不具合を修正しています。 子プロセスの pid を 書き込み用の fptr に引き継ぐようにしています。こんなのまだ(ry

nobu:r43118 2013-10-02 16:48:19 +0900

r43117 の修正に対するテストを追加しています。

ko1:r43119 2013-10-02 18:56:04 +0900

malloc による GC 実施のしきい値 GC_MALLOC_LIMIT_MAX を大きくして GC 回数を減らすようにしています。 また xrealloc() ではサイズの加算はするものの GC の実行はトリガしないようにしています。

mame:r43120 2013-10-02 21:41:08 +0900

random.c で変数の宣言スコープの間違いを修正しています。宣言したブロックの外でそのバッファを指すポインタを利用していました。 Coverity Scan で発見した不具合とのこと。

mame:r43121 2013-10-02 21:41:28 +0900

拡張ライブラリ socket の Socket.getifaddrs で getifaddrs(3) が ifaddrs に NULL を返した場合のチェックがなくメモリリークの可能性があったのを、すぐに空の配列を返すようにして防いでいます。これも Coverity Scan で発見された不具合とのこと。

knu:r43122 2013-10-03 00:25:34 +0900

misc/ruby-additional.el で eval-after-load に渡している引数を修正しています。ruby-mode.el をファイル名で指定していたのを elisp のシングルクオートによるクオートに変更しています。
[追記]コメント欄も参照。コミットログに記載されていた quote というのは第1引数の変更のことではなくてその後の (progn ...) 以降のところの quote のことみたいです。[/追記]

svn:r43123 2013-10-03 00:25:39 +0900

version.h の日付更新。