ruby-trunk-changes r56982 - r56985

今日は Array#shuffle などの random に渡したオブジェクトの rand の呼び出しについてのチェック強化と複数 Thread からの require の lock の不具合修正などがありました。

naruse: r56982 2016-12-05 08:14:46 +0900

複数の Thread から同時に require した時のテストでタイムアウトすることがあったので assert_in_out_err の timeout を 20 にのばしています。

svn: r56983 2016-12-05 08:14:47 +0900

version.h の日付更新。

nobu: r56984 2016-12-05 09:03:45 +0900

random.c の rb_random_ulong_limited() で乱数器オブジェクトの obj の rand メソッドを呼び出す時に Kernel#rand メソッドが存在するため意図しないオブジェクトを渡しても呼べてしまっていたので rb_funcallv_public() で public method に限定してメソッド呼び出しするようにして Kernel#rand を使ってしまうのを防いでいます。 [ruby-dev:49892] [Misc #13003]

shugo: r56985 2016-12-05 20:10:05 +0900

r56982 で timeout をのばしてみた複数 Thread での同じファイルの require のテストですが、どうやら load lock にデッドロックする可能性が残ってたみたいで、load_lock() で他の Thread でロードが完了して thread_shield が削除された瞬間に不要な loading_tbl への thread_shield の追加をする可能性があったのを追加しないようにしています。 [ruby-core:78464] [Bug #12999]
load lock はいつ読んでも「これでバッチリだ」と言い切れる気がしないですね…