こんにちは、なかむら(う)です。

In message "[ruby-dev:37381] Re: Ruby開発ミーティングログ"
    on Dec.11,2008 13:44:58, <usa / garbagecollect.jp> wrote:
> > - Bug #755 [ruby-core:19946]: Windows specific. うささんに聞く (akr)
> 
> 対応パッチを作ってこの問題が解決するところまではたどり着いて
> るのですが、メモリ関連のバグを仕込んでいるらしく別のテストで
> [BUG]るようになってしまったので困っているところです。
> 誰かパッチのバグを探してくれる人がいるならそのパッチを出しま
> すが...

これ、原因わかりました。

blocking region内でGCが発生すると、blocing regionじゃないスレ
ッド(なんか名前ないかな)のスタックが一切markされないため、そ
のスレッドでスタック上にあるVALUEが回収されてしまいます。
対策としては、

 (1) blocking regionからGCが起こされたときはblocking regionじゃ
     ないスレッドを止めてそのスレッドのスタックをmarkしてGCを
     続行させる。
       → 無理がありそう

 (2) blocking regionからGCを起こさせない

   (a) xmalloc等は使用禁止とする
         → 面倒なのではないか

   (b) blocking regionからxmalloc等が呼ばれたときはメモリ確保
       できなくてもGCしない

といったあたりがIRCでは出ました。


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>