ruby-trunk-changes r57469 - r57483

今日は IO#write や IO#syswrite などで一時オブジェクトの生成を抑制する最適化、openssl の 2.0.3 のマージなどの変更がありました。

normal: r57469 2017-01-31 05:40:18 +0900

rb_str_tmp_frozen_acquire() と rb_str_tmp_frozen_release() という関数を追加して io_fwrite() で書き込む文字列バッファ用の String オブジェクトを freeze したものを生成する時に利用してゴミオブジェクトがループを回すたびに生成されるのを抑制するようにする最適化を行なっています。 [ruby-core:78898] [Bug #13085]

svn: r57470 2017-01-31 05:40:19 +0900

version.h の日付更新。

normal: r57471 2017-01-31 06:54:32 +0900

r57469 で追加した rb_str_tmp_frozen_release() で embed された文字列のチェックを先に分岐するように修正しています。 [ruby-core:78898] [Bug #13085]

normal: r57472 2017-01-31 07:03:57 +0900

rb_io_syswrite() でも r57469 と同様の一時オブジェクトの生成を抑制する最適化を導入しています。 [ruby-core:78898] [Bug #13085]

normal: r57473 2017-01-31 09:41:56 +0900

Kernel#sprintf などの実装である rb_str_format() でも r57469 で導入した rb_str_tmp_frozen_acquire()、 rb_str_tmp_frozen_release() を利用して一時オブジェクトの生成を抑制するようにしています。

nobu: r57474 2017-01-31 10:18:10 +0900

r57415 で追加した IO#close の race condition についてのテストを assert_separately を使って子プロセスで起動するようにしています。

nobu: r57475 2017-01-31 11:01:31 +0900

template/limits.c.tmpl で ULLONG_MAX が未定義の時に独自の定義をするようにしています。古い CentOS で未定義になってたそうです。

normal: r57476 2017-01-31 11:18:58 +0900

time_strftime でも rb_str_format() と同様に r57469 で導入した rb_str_tmp_frozen_acquire() と rb_str_tmp_frozen_release() を利用して一時オブジェクトの生成を抑制する最適化を導入しています。

ko1: r57477 2017-01-31 15:31:06 +0900

thread.c, thread_sync.c で真偽値として 0, 1 を使っていたところに TRUE, FALSE を利用するように書き換えています。

ko1: r57478 2017-01-31 15:39:01 +0900

thread.c に sleep_forever() を呼び出す関数 rb_thread_sleep_deadly_allow_spurious_wakeup() というのを切り出すリファクタリング

ko1: r57479 2017-01-31 16:00:38 +0900

Queue でシグナルで spurious wakeup (起床すべきイベントは起きてないのだけど sleep 状態から抜けること。適切にチェックして再度 sleep すべき)した時にうまく動作しなくなっていたので、r57478 で切り出した rb_thread_sleep_deadly_allow_spurious_wakeup() を呼ぶように修正しています。 [ruby-core:75636] [Bug #12405]

nobu: r57480 2017-01-31 17:03:08 +0900

標準添付ライブラリ mkmf.rb で message メソッドには format 文字列を渡す必要があったのですが出力する文字列をそのまま渡していたので "%s" を使って整形して出力するように修正しています。

hsbt: r57481 2017-01-31 17:48:14 +0900

lib/webrick/webrick.gemspec というファイルが追加されています。標準添付ライブラリ webrick を default gems にするみたいですね。 [ruby-core:79339] [Feature #13173]

rhe: r57482 2017-01-31 19:08:22 +0900

拡張ライブラリ openssl の 2.0.3 をマージしています。変更内容 https://github.com/ruby/openssl/compare/v2.0.2...v2.0.3
Windows でのビルドの修正や OpenSSL::X509::Name#eql? の不具合修正などが含まれているようです。 [ruby-core:78878] [Bug #13080] [ruby-core:79310] [Bug #13170]

naruse: r57483 2017-01-31 19:37:50 +0900

README.md にビルド時に RUBY_CODESIGN 環境変数に証明書名を指定することで codesign で署名することで make test-all する時に firewall の警告ダイアログを抑制できることを追記しています。