ruby-trunk-changes r51486 - r51491

今日は Encoding::Converter の GC 負荷時の不具合修正などがありました。

tenderlove: r51486 2015-08-05 08:56:44 +0900

r51380, r51381, r51455 などのさらに続きで、拡張ライブラリ openssl の OpenSSL::SSL::SSLSocket で tmp_dh_callback と同様に client_cert_cb, tmp_ecdh_callback, session_new_cb, session_get_cb などの callback を Ruby 実装のメソッドとして @context から取得するようにしています。

nobu: r51487 2015-08-05 10:48:10 +0900

r51486 の変更で ext/openssl/ossl_ssl.c で不要になったローカル変数を削除しています。

nobu: r51488 2015-08-05 14:37:58 +0900

Encoding::Converter で利用される rb_econv_open0() という関数で sname, dname がいずれも空文字列の時に静的な領域の空文字列 "" で再初期化するようにしています。GC のタイミングによってエラーになることがあるそうです。 多分呼び元で動的な領域の文字列を渡すことがあるのだろうと思いますが、具体的な例は探しきれませんでした。 [ruby-core:70247] [Bug #11416]

nobu: r51489 2015-08-05 14:40:17 +0900

r51488 の続きかと思われるのですが Encoding::Converter の初期化中の例外発生時のところなどで文字列オブジェクトに RB_GC_GUARD() をつけて最適化による GC mark 漏れの対応をしています。 [ruby-core:70247] [Bug #11416]

nobu: r51490 2015-08-05 14:43:58 +0900

insns.def の leave 命令の実装で vm_base_ptr() の呼び出しがエラー時に重複していたのでローカル変数に入れて使いまわすようにしています。 まあ、rb_bug() で強制終了する時のパスなので効率的な意味はあまりないと思いますけどね。

nobu: r51491 2015-08-05 15:32:04 +0900

拡張ライブラリ socket の ext/socket/socket.c の関数 socket_s_ip_address_list() で静的領域の文字列ポインタを代入する変数 reason の宣言に const を追加して警告を抑制しています。