From: KOSAKI Motohiro Date: 2011-07-08T19:55:30+09:00 Subject: [ruby-dev:44063] Re: [Ruby 1.9 - Bug #4223] GC.stress = true で謎の ArgumentError 2011年7月8日19:34 Kenta Murata : > むらたです。 > > > On Thursday, July 7, 2011 at 9:49 PM, Motohiro KOSAKI wrote: > >> 直感的には、関数の最後でRB_GC_GUARD()しないといけない気がしますがどう思います? > むらけんさん > > z = bignew(zn, RBIGNUM_SIGN(x)); > > ここで GC が走る可能性があって、そういう場合に x をガードする事が目的なんだと思います。 > ですから、bigadd_int の最初に RB_GC_GUARD して良いです。 あ、すいません。昨日僕のいない間に #ruby-jaで議論して後ろに移動させるという 結論になったみたいです。 22:49:17 途中に付けても無駄になることがある 22:50:09 最後じゃなくてもいいけど、ガードが必要な部分のあとにないとダメ 22:50:41 結局そういう事になったのか 22:51:41 では、私のパッチよりもっとあとでないとまずいですね 22:51:47 経験則的に 22:52:25 前に置いてるの沢山ありますよ たしか。 22:52:41 xdsを参照してる最後の場所より後だから、同じ関数のwhileの後 22:53:15 RB_GC_GUARDをもうちょい工夫すればいいのかなぁ 22:53:27 全く同じ構造のコードだから bigsub_int にも要るかな 22:53:27 [ruby-dev:40942] matzにこういわれたので、 22:53:28 {unak_away} http://mla.n-z.jp/?ruby-dev=40942 22:53:48 VC向けのRB_GC_GUARDは試行錯誤した 22:54:16 フロー解析して最適化されちゃうなら、工夫じゃどうにもならなさそうな 22:54:35 経験的にOKとしかいいようがない。