ruby-trunk-changes r48788 - r48829

今日はたくさんコミットがありましたが大半は拡張ライブラリ openssl の RTypedData 化でした。また WeakRef で同じオブジェクトへの参照を大量に作る時の省メモリ化やファイナライザ実行中の割り込みが無視される不具合の修正などがありました。

nobu: r48788 2014-12-13 04:59:22 +0900

bin/erb でブロックパラメータでローカル変数の shadowing をしていて -w つきだと警告が出ていたのを修正しています。 each はブロックを使うので for で書き直すことで新たなスコープを作らないようにしています。 [ruby-core:65772] [Feature #10395]

svn: r48789 2014-12-13 04:59:39 +0900

version.h の日付更新。

nobu: r48790 2014-12-13 06:57:33 +0900

拡張ライブラリ openssl で T_DATA 型のオブジェクトから構造体ポインタを取り出す Data_Get_Struct() の wrapper マクロ GetSSLCTX() と GetSSL() を定義してこれを使うようにリファクタリングしています。

nobu: r48791 2014-12-13 06:57:44 +0900

ここから怒涛の連続コミットで拡張ライブラリ openssl の RData から RTypedData へのオブジェクト型変更があります。まず OpenSSL::Digest から。

nobu: r48792 2014-12-13 06:57:49 +0900

拡張ライブラリ openssl の OpenSSL::Engine の RTypedData 化。

nobu: r48793 2014-12-13 06:57:56 +0900

拡張ライブラリ openssl の OpenSSL::HMAC の RTypedData 化。

nobu: r48794 2014-12-13 06:58:03 +0900

拡張ライブラリ openssl の OpenSSL::Netscape::SPKI の RTypedData 化。

nobu: r48795 2014-12-13 06:58:07 +0900

拡張ライブラリ openssl の OpenSSL::OCSP::Request の RTypedData 化。

nobu: r48796 2014-12-13 06:58:11 +0900

拡張ライブラリ openssl の OpenSSL::OCSP::Response の RTypedData 化。

nobu: r48797 2014-12-13 06:58:17 +0900

拡張ライブラリ openssl の OpenSSL::OCSP::BasicResponse の RTypedData 化。

nobu: r48798 2014-12-13 06:58:22 +0900

拡張ライブラリ openssl の OpenSSL::OCSP::CertificateId の RTypedData 化。

nobu: r48799 2014-12-13 06:58:25 +0900

拡張ライブラリ openssl の OpenSSL::SSL::Session の RTypedData 化。

nobu: r48800 2014-12-13 06:58:31 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLContext の RTypedData 化。

nobu: r48801 2014-12-13 06:58:34 +0900

拡張ライブラリ openssl の OpenSSL::SSL::SSLSocket の RTypedData 化。
これコメントや rb_data_type_t::wrap_struct_type の名前をみると OpenSSL::SSL のことかと思ってしまいますが実際 alloc しているのは SSLSocket でした。確保している OpenSSL の構造体の名称が SSL だからなのですが alloc 関数名も ossl_ssl_s_alloc() でまぎらわしいですね。 OpenSSL::SSL はただの Module なので RData でも RTypedData でもないです。

nobu: r48802 2014-12-13 07:37:53 +0900

拡張ライブラリ openssl の OpenSSL::PKCS12 の RTypedData 化。

nobu: r48803 2014-12-13 07:37:55 +0900

拡張ライブラリ openssl の OpenSSL::PKCS7 の RTypedData 化。

nobu: r48804 2014-12-13 07:37:58 +0900

拡張ライブラリ openssl の OpenSSL::PKCS7::SignerInfo の RTypedData 化。

nobu: r48805 2014-12-13 07:38:01 +0900

拡張ライブラリ openssl の OpenSSL::PKCS7::RecipientInfo の RTypedData 化。

nobu: r48806 2014-12-13 08:19:07 +0900

拡張ライブラリ openssl の OpenSSL::PKey::PKey の RTypedData 化。

nobu: r48807 2014-12-13 08:19:13 +0900

拡張ライブラリ openssl の OpenSSL::PKey::EC の RTypedData 化。

nobu: r48808 2014-12-13 08:19:24 +0900

拡張ライブラリ openssl の OpenSSL::PKey::EC::Point の RTypedData 化。

nobu: r48809 2014-12-13 08:38:44 +0900

拡張ライブラリ openssl の OpenSSL::X509::Attribute の RTypedData 化。

nobu: r48810 2014-12-13 08:38:55 +0900

拡張ライブラリ openssl の OpenSSL::X509::Certificate の RTypedData 化。

nobu: r48811 2014-12-13 08:39:04 +0900

拡張ライブラリ openssl の OpenSSL::X509::CRL の RTypedData 化。

nobu: r48812 2014-12-13 08:46:30 +0900

拡張ライブラリ openssl の OpenSSL::X509::Extention の RTypedData 化。

nobu: r48813 2014-12-13 08:46:42 +0900

拡張ライブラリ openssl の OpenSSL::X509::ExtentionFactory の RTypedData 化。

nobu: r48814 2014-12-13 08:59:19 +0900

拡張ライブラリ openssl の OpenSSL::X509::Name の RTypedData 化。

nobu: r48815 2014-12-13 08:59:28 +0900

拡張ライブラリ openssl の OpenSSL::X509::Request の RTypedData 化。

nobu: r48816 2014-12-13 08:59:36 +0900

拡張ライブラリ openssl の OpenSSL::X509::Revoked の RTypedData 化。

nobu: r48817 2014-12-13 09:06:48 +0900

拡張ライブラリ openssl の OpenSSL::X509::Store の RTypedData 化。

nobu: r48818 2014-12-13 09:06:54 +0900

拡張ライブラリ openssl の OpenSSL::X509::StoreContext の RTypedData 化。

nobu: r48819 2014-12-13 09:20:00 +0900

拡張ライブラリ openssl のテストで OpenSSL::OSCP::Request を作成するテストを別プロセスで実行するように変更しています。 CentOS 5.6 i386 向けとのことですが、何か副作用があったんでしょうか。

normal: r48820 2014-12-13 10:28:18 +0900

WeakRef でメモリリークがあった不具合を修正しています。リークというか、オブジェクトの finalizer 登録時に同じブロックを重複して登録するようになっていたので、登録前に同じものが登録済みでないか確認するようにして省メモリ化しています。 [ruby-core:66428] [Bug #10537]

nobu: r48821 2014-12-13 11:11:10 +0900

インスタンス変数を持つオブジェクトの clone のメモリリークのテストで RSS のチェックは省くようにしています。 メモリリークのテストは難しくて偽陽性が多いので。手元でもこのテストは確率的に失敗していましたね。

nobu: r48822 2014-12-13 12:05:31 +0900

r48819 の openssl のテストの子プロセス化の変更を revert しています。

nobu: r48823 2014-12-13 12:05:43 +0900

拡張ライブラリ openssl のテスト用ユーティリティ OpenSSL::TestUtils を OpenSSL のバージョンが 1.0 未満の場合は定義しないようにしています。0.9.8 は捨てですかー。まあ今どき開発環境で 0.9.8 使ってるところはないでしょうけどね。運用されてるサーバはともかく…

nobu: r48824 2014-12-13 16:08:18 +0900

標準添付ライブラリ net/http のテストでも OpenSSL::TestUtils に依存していたところがあったので defined? のチェックを OpenSSL から OpenSSL::TestUtils に変更しています。

nobu: r48825 2014-12-13 16:12:56 +0900

標準添付ライブラリ open-uri のテストでも同様に OpenSSL::TestUtils に依存していたところがあったので defined?(OpenSSL::TestUtils) をチェックしてなければスキップするようにしています。

nobu: r48826 2014-12-13 17:59:54 +0900

スタックオーバフローのチェックで利用している ucontext_t::uc_mcontext の型を違いを configure 時に検出して DEFINE_MCONTEXT_PTR() というマクロを定義して取り出せるようにしています。

nobu: r48827 2014-12-13 18:01:59 +0900

FreeBSDi386/x86_64 の環境でも ucontext_t::uc_mcontext を使ったスタックオーバフローの検出処理を有効にしています。

hsbt: r48828 2014-12-13 18:33:33 +0900

拡張ライブラリ openssl の OpenSSL::PKey::EC のテストでも OpenSSL::TestUtils に依存しているので存在チェックするようにしています。 元々 OpenSSL::PKey::EC をチェックしていたのでここは変更が漏れていたようです。

nobu: r48829 2014-12-13 20:41:57 +0900

ObjectSpace.define_finalizer の実行中に割り込みがあっても無視されるという不具合を修正しています。 r40940 あたりで導入した postponed_job の処理の割り込み中のマスクに TRAP_INTERRUPT_MASK も追加してみています。 おそらく、TRAP_INTERRUPT_MASK で割り込み自体は遅延されていないのに、実際に割り込まれた時の JUMP_TAG() による大域脱出のエラーは握り潰されるので(postponed_job では実行中のスレッドとはコンテキストの異なる処理をしているので、エラーがあっても伝播しない)、結果割り込みが無視されるという現象が起きていたので、ちゃんと postponed_job の間は割り込みマスクして戻ってきた時にあらために割り込み発生させるようにしているのだと思います。 postponed_job に長い処理があるとまずそうですけどね… [ruby-core:66825] [Bug #10595]