ruby-trunk-changes r60077 - r60085

今日は using メソッドに Module でない引数とブロックを渡した時に異常終了する場合がある不具合の修正や内部的に Hash オブジェクトを利用する時の最適化などがありました。

nobu: r60077 2017-09-30 21:26:23 +0900

Module#using に Module でないオブジェクトを渡してブロックも渡しているとオブジェクトの型チェックが抜けてて SEGV していた不具合を修正しています。 ignored_block() という警告出力のための関数での Check_Type() が不足していました。元のチケットはもうちょっと興味深い点がありますが…。なぜトップレベルで using が上書きされてないんだろう。 [ruby-dev:50270] [Bug #13956]

glass: r60078 2017-09-30 22:14:09 +0900

array.c の配列から Hash を作る時に空の Hash オブジェクトを作る時に rb_hash_new() のかわりに、サイズが判っているので rb_hash_new_with_size() であらかじめ容量を確保しておくようにしています。

normal: r60079 2017-10-01 06:50:42 +0900

rb_thread_wakeup_timer_thread() および rb_thread_wakeup_timer_thread_low() で fork した子プロセス内で rb_thread_wakeup_timer_thread_fd() の呼び出しやそのための timer_thread_pipe.writing の increment/decrement をしないようにしています。 rb_thread_wakeup_timer_thread_fd() の中でも pid のチェックはしているのでパフォーマンスのためだけかな、と思ったらチケットをみると無限ループに陥ることがあるというチケットになってますね。 [ruby-core:83064] [Bug #13794]

svn: r60080 2017-10-01 06:50:42 +0900

version.h の日付更新。

normal: r60081 2017-10-01 10:44:47 +0900

file.c の変数に volatile 修飾子をつけていたところを何箇所か RB_GC_GUARD() による保護に置き換えています。

nobu: r60082 2017-10-01 11:24:11 +0900

r59946 の String#intern の再定義に dynamic symbol 作成が影響を受けないようにする修正のテストを追加しています。

nobu: r60083 2017-10-01 11:39:22 +0900

tool/generic_erb.rb に -i オプションを追加して複数のテンプレートファイルを連結して出力できるようにしています。

nobu: r60084 2017-10-01 12:46:59 +0900

common.mk の UNICODE_DOWNLOAD で ruby の引数 -C でソースディレクトリに移動して実行していたのを、出力するディレクトリを絶対パスで指定するようにしています。また --cache-dir でキャッシュディレクトリを明示的に指定するようにしています。

glass: r60085 2017-10-01 13:26:25 +0900

hash.c の rb_hash_invert() や struct.c の rb_struct_to_h()、キーワード引数を受け取る make_rest_kw_hash() などの関数でも r60078 と同様に ary_tmp_hash_new() のかわりに rb_hash_new_with_size() を使ってあらかじめ必要な容量を確保した Hash を作るようにしています。