ruby-trunk-changes r46399 - r46406

今日は realloc() 後の GC で SEGV することがあった不具合の対応などがありました。

ko1: r46399 2014-06-11 01:55:32 +0900

GC.stress = true の状態では xmalloc()/xrealloc() でメモリ確保する前に GC を実行するようにしています。チケットの問題は xrealloc() 直後に GC が走ると変更前のメモリ領域に mark 処理でアクセスしてしまうことがあるというのについての対策みたいです。 [ruby-dev:48233] [Bug #9859]
最近の変更で入ったものみたいだから 2.1 以前へのバックポートは不要かなぁ。

svn: r46400 2014-06-11 01:55:39 +0900

version.h の日付更新。

nobu: r46404 2014-06-11 17:37:29 +0900

thread.c でのデバッグ出力のマクロ DEBUG_OUT() で thread id のためのフォーマット指示子を修正しています。 なお rdoc コメントをみると Thread.DEBUG とか Thread.DEBUG= というメソッドがあって、なんとこんなものがあったのか…と思いきや THREAD_DEBUG というマクロが負に(なんで負なんだろう…)定義されていないと定義されないようになっていました。

nobu: r46405 2014-06-11 17:37:44 +0900

タイマースレッドの pthread_t を保持する変数を構造体にして、初期化済みかどうかを判定するフラグを追加しています。 pthread_t の値としては 0 も有効な値としてありえるので、pthread_t 型の値だけだとそれが thread id なのかただの初期値(まだ生成されていない)なのか判別できないので、ということだそうです。

nobu: r46406 2014-06-11 17:38:09 +0900

pthread_t を scalar 型だとしてデバッグ出力などで文字列化しているところがありましたが、構造体だったりと pthread_t の型が実際には何なのかは規定されていないため、文字列化する関数を導入しています。 しかし configure での pthread_t が scalar 型かどうかの判定が 0 を代入してみて if(!thread_id) で判定しているのですが、構造体に対して !var とかするとどうなるんだろう…。 [ruby-core:62867] [ruby-core:62857] [Bug #9884]