ruby-trunk-changes r43495 - r43503

今日は String#scrub の不具合修正と rb_live_object() の誤判定の不具合(WeakRef で SEGV したりする)の修正などがありました。

ko1:r43495 2013-11-01 01:09:10 +0900

GCベンチマークスクリプト benchmark/gc/gcbench.rb で終了時に可能なら /proc/self/status を読んで HWM(high water mark) つまり最大のメモリ使用量? を表示するようにしています。

svn:r43496 2013-11-01 01:09:15 +0900

version.h の日付更新。

kosaki:r43497 2013-11-01 06:27:40 +0900

構造体 rb_mutex_t のメンバ cond_waiting と next_mutex の順番を入れ替えています。 64bit 環境でのアライメントを考慮して構造体サイズが小さくなるようにしているそうです。 thread.c で定義されていて公開されていない構造体なのでレイアウトが変化しても大丈夫そうです。 [ruby-core:58114] [Feature #9068]

nobu:r43498 2013-11-01 16:37:24 +0900

load.c の rb_load_internal() で GET_THREAD() を毎回呼ばずにローカル変数に格納しておいたものを使いまわすようにするリファクタリング

nobu:r43499 2013-11-01 16:37:27 +0900

"clobbered by 'longjmp' or 'vfork'" の警告を抑制するために rb_load_internal() から rb_load_internal0() に切り出して current_thread を引数で渡すようにしています。

nobu:r43500 2013-11-01 16:55:56 +0900

rb_str_scrub() を公開関数にして、使いやすいように可変の引数を受け取るところはメソッド定義の仕様ではなくて2つの固定の引数を受けとることにして第2引数に Qnil が渡されたら省略されたものとして扱うようにしています。なのでメソッド定義用の関数は str_scrub() として改名しています。 String#scrub の提供を gems パッケージ化しようとしてそのために変更したみたいですね。

nobu:r43501 2013-11-01 17:00:43 +0900

test/ruby/test_m17n.rb の String#scrub のテストで nil を明示的に渡しても ArgumentError になることを確認するテストケースを追加しています。 r43500 の影響で省略可能引数の扱いがデグレしていないことを確認しようとしたのだと思います。

nobu:r43502 2013-11-01 17:25:34 +0900

gc.c の is_live_object() でオブジェクトの型で判定しているところで T_ZOMBIE だったら回収予約済みのオブジェクトなので偽を返すように修正しています。 WeakRef のテストで SEGV することがあった不具合の修正みたいです。 [ruby-dev:47786] [Bug #9069]

nobu:r43503 2013-11-01 20:53:59 +0900

String#scrub の実装でブロックつき呼び出しの時にブロックに渡す文字列を作るときに使う変数が間違っていた不具合を修正しています。 r43500 の変更とは関係なくその前からあった不具合みたいです。