ruby-trunk-changes r51566 - r51578

今日は spawn/exec する時の timer thread の扱いの変更という大きめの変更がありました。さあ signal 喪失せずにできてるかな。

nobu: r51566 2015-08-13 22:49:44 +0900

標準添付ライブラリ timeout で発生させる例外のメッセージとして渡す文字列リテラルを freeze しておくことで使いまわされるようにしています。 なるほど、この文字列はタイムアウトしない時でも常に用意されてるので普通のリテラルで毎回確保してるとムダが多いのですね。 https://github.com/ruby/ruby/pull/996

nobu: r51567 2015-08-13 23:43:14 +0900

rubygems のテストの setup で common_installer_setup を呼ぶようにしています。 make test-all で -j オプションを渡して並列テストすると初期化漏れしてることがあったみたいです。

nobu: r51569 2015-08-14 11:58:49 +0900

openssl のテスト test_ctx_server_session_cb で "SSLv3" がサポートされてるかチェックする assertion を先頭に追加しています。

svn: r51570 2015-08-14 11:59:33 +0900

version.h の日付更新。

nobu: r51574 2015-08-14 18:40:31 +0900

標準添付ライブラリ win32 の win32/registry.rb で @@type2name という定数から名前の対応を取り出すクラス変数を Hash から Array に変更しています。 定数が連続した整数だから、とのこと。

nobu: r51575 2015-08-14 18:42:13 +0900

win32/registry.rb で文字列の終端文字の wide character 対応をしています。 [ruby-core:70365] [Bug #11439]

normal: r51576 2015-08-14 18:44:10 +0900

exec/spawn などで timer thread が利用している pipe と同じ fd を IO の付けかえ先に指定された時のために fd をすげかえるように r51268 で対応されていまいたが、これは revert して、 spawn/exec の時に常に timer thread を停止するようにして、その際に利用している pipe の fd も close するため結果として fd のすげかえは不要なものとしています。またこの際 timer_thread_pipe の構造体に writer というメンバで操作中のカウンタを入れることで排他処理をしています。また、timer thread への停止の通知は pipe の close で通知するようにしています。あと timer thread の停止でなにかエラーが発生したら異常終了するようにしていましたが、rb_warn() で警告を出力して続行するようにしています。コミットログにこの点についてはコメントされてますが、どういう意味かよくわからなかったです。 [ruby-core:70386] [Bug #11336]
なお timer thread を全てのプラットフォームで止めるようにするのは r51209 で行なわれて、シグナルの喪失があるということで r51268 で revert されているのですが、多分この点は考慮されているものと思います。

normal: r51577 2015-08-14 18:51:50 +0900

METHOD_ENTRY_VISI_SET() や METHOD_ENTRY_FLAGS_SET() で引数のチェックをしている VM_ASSERT() での警告除去のためキャストを追加しています。

nobu: r51578 2015-08-14 19:38:29 +0900

r51576 の追加修正。 thread_pthread.c の native_stop_timer_thread() で ATOMIC_CAS() の引数に明示的な rb_atomic_t への cast を追加しています。これも警告除去のためとのこと。