ruby-trunk-changes r52097 - r52101

今日は UDPSocket のエラー時のメモリリーク修正と主にオブジェクト生成まわりの最適化がありました。

nobu: r52097 2015-10-10 08:52:23 +0900

拡張ライブラリ socket の UDPSocket の #bind, #connect, #send などで close した socket について呼ばれた場合 GetOpenFile() で例外が発生するので、その前に struct rb_addrinfo 構造体のメモリを確保していたためメモリリークしていたのを修正しています。

svn: r52098 2015-10-10 08:52:34 +0900

version.h の日付更新。

ko1: r52099 2015-10-10 15:34:24 +0900

newobj_of() で GC を起動する時の関数 newobj_of_slowpass() の引数を 6個に減らして x86_64 でレジスタ経由で引数が渡せるようにする高速化(hook_needed は関数内部で gc_event_hook_needed_p を呼ぶことで取得させてます)、str_duplicate() の inline 関数化、また newobj_of_init() と newobj_of_slowpass() の引数の先頭のほうを同じにしておくために newobj_of_slowpass() の引数の順序を変更…と読めるんですが、実際は _init() と _slowpass() で順序が変わってるのですが、これでいいのかな。 https://github.com/ruby/ruby/pull/1050

ko1: r52100 2015-10-10 18:36:10 +0900

r37186 で導入された callinfo にメソッドに対応する関数をキャッシュして直接呼び出す CI_SET_FASTPATH() による機能の利用を指示する引数 enable_fastpath を vm_call_method0()、vm_call_zsuper() や vm_call_method_each_type() などから削除して、enable_fastpath に FALSE を渡していたところではダミーの struct rb_call_cache を作成してこれにキャッシュさせることで結果的に fastpath 機能を無効にさせるようにしています。

nobu: r52101 2015-10-10 19:04:44 +0900

r52097 の拡張ライブラリ socket での UDPSocket のメモリリークの修正の再修正で、GetOpenFile() による fd の取得は rb_ensure() で例外が発生しても後始末が行なわれる関数内に移動するようにしています。