ruby-trunk-changes r45295 - r45302

今日は主に拡張ライブラリ fiddle での例外発生時の潜在的メモリリークの修正などがありました。

normal: r45295 2014-03-09 06:44:24 +0900

variable.c の構造体 struct global_variable のメンバーの順番を入れ替えることでアライメントを調整して 64bit 環境で 8バイト構造体のサイズを節約しています。

svn: r45296 2014-03-09 06:44:30 +0900

version.h の日付更新。

hsbt: r45297 2014-03-09 13:09:10 +0900

eval.c の ruby_options() 関数のコメントの不要な空白除去。 [ruby-dev:48026] [Bug #9615]

nobu: r45298 2014-03-09 13:17:38 +0900

テストのユーティリティ envutil.rb の assert_no_memory_leak でメモリリークがないか検査する方法に size だけでなく RSS も比較するようにしています。また明示的な GC.start の呼び出しも追加するようにしています。

nobu: r45299 2014-03-09 13:19:10 +0900

r45291 の拡張ライブラリ dl および fiddle のメモリリークの修正のテストを追加しています。 r45298 で追加した assert_no_memory_leak の変更はこれのためだったのですね。 [ruby-dev:48020] [Bug #9599]

nobu: r45300 2014-03-09 13:51:17 +0900

拡張ライブラリ fiddle で Fiddle::Function.new や Fiddle::Function#call で引数の数が多すぎてオーバフローがおきる時に例外を発生させるようにしています。

nobu: r45301 2014-03-09 13:51:38 +0900

拡張ライブラリ fiddle の Fiddle::Function#call で一時的に利用するバッファを xcalloc() で確保していたため、その先の処理で例外などが発生した時に解放されずにメモリリークする可能性があったのを ALLOCV() を使って確保することで大域脱出がおきてもスタックと同時かもしくは GC で回収されるようにしています。

normal: r45302 2014-03-09 14:22:01 +0900

class.c で malloc(3)/free(3) を直接利用していたところがあったので xmalloc()/xfree() を利用するようにしています。 xmalloc() (ruby_xmalloc()) はメモリ不足の時に GC を走らせて空きを作ろうとしますし、メモリの利用状況が記録されるため GC の頻度へ影響するので CRuby では xmalloc() を使うほうが良いのです。 [ruby-core:61386] [Bug #9616]