ruby-trunk-changes r50503 - r50514

今日は TypedData のオブジェクト確保時の潜在的な memory leak の修正などがありました。

kazu: r50503 2015-05-16 19:45:03 +0900

r50491 の NEWS の追記部分の typo 修正。

svn: r50504 2015-05-16 19:45:21 +0900

version.h の日付更新。

usa: r50505 2015-05-16 20:00:07 +0900

Windows 版の accept(2) の wrapper 実装 rb_w32_accept() で rb_w32_open_osfhandle() を呼ぶのを accept(2) の後にすることで後始末のコードの分岐を減らすリファクタリング

nobu: r50506 2015-05-16 21:17:14 +0900

r50464 や r50466 の TypedData_Wrap_Struct() などのマクロの実体として追加した関数の名称を xxx_alloc() から xxxx_wrap() と改名しています。

nobu: r50507 2015-05-16 21:21:25 +0900

proc.c と vm.c で Proc オブジェクトを作る時に先に構造体のメモリを確保してからオブジェクトを生成していたのを、オブジェクトの生成を先にして wrap するようにして、例外発生時に memory leak する可能性があったのを修正しています。

hsbt: r50508 2015-05-16 21:38:11 +0900

Enumerable#grep_v の rdoc 用コメントのサンプルの結果の間違いを修正しています。 https://github.com/ruby/ruby/pull/901

hsbt: r50509 2015-05-16 21:41:29 +0900

String#sub の rdoc 用コメントに、置換結果にマッチしたグループの参照を入れる時のバックスラッシュの数についての注記を追記しています。これ憶えられないからマッチ結果がブロックを使うのがおすすめ。 [ruby-core:69121] [Bug #11132] https://github.com/ruby/ruby/pull/900

nobu: r50510 2015-05-16 21:56:29 +0900

error.c と file.c でも TypedData_Wrap_Struct() に渡すポインタのメモリ確保を先にしていたのを、オブジェクトを確保してからポインタの指す構造体のメモリを確保するように修正して潜在的な memory leak を修正しています。

nobu: r50511 2015-05-16 21:56:48 +0900

parse.y と variable.c、拡張ライブラリ digest や strscan でも構造体のメモリ確保とオブジェクトの確保の順番を変更して潜在的 memory leak を修正しています。

nobu: r50512 2015-05-16 21:57:17 +0900

拡張ライブラリ socket の ext/socket/ifaddr.c でも SockIfaddr でオブジェクトの確保後に構造体のメモリ確保を…というか SockIfaddr で wrap する構造体は複数のオブジェクトで同じメモリを切り分けて共有しているんですね。独特のメモリ管理が行なわれていた…。で refcount も最初に作る(予定の)オブジェクト数ぶんセットするのではなくて、オブジェクトが実際に確保できた時にインクリメントしていくことで、途中でオブジェクトの確保に失敗した時に leak するのを避けるようにしています。

tenderlove: r50513 2015-05-17 00:02:41 +0900

r50494 で autoload が require メソッドを呼ぶようになったことで、テストで require が無限再帰するようになっていたのを修正。 test/ruby/test_require.rb で子プロセスに --disable-gems をつけて rubygems を無効化して起動するようにしています。 これ本当に rubygems を無効化してテストに意味あるのかな。一時的な措置ですかね。

svn: r50514 2015-05-17 00:02:59 +0900

version.h の日付更新。