Issue #4223 has been updated by Motohiro KOSAKI.
直感的には、関数の最後でRB_GC_GUARD()しないといけない気がしますがどう思います? > むらけんさん
Bug #4223: GC.stress = true で謎の ArgumentError
Author: Makoto K.
Status: Assigned
Priority: Low
Assignee: Makoto K.
Category:
Target version: 1.9.3
ruby -v: ruby 1.9.3dev (2010-12-29 trunk 30417) [x86_64-freebsd8.2]
=begin
手元の環境で、trunk の r29690 以降で、次のようなスクリプトが、
foo.rb
GC.stress = true
t = Time.local(2000)
File.utime(t + 1, t + 2, “foo.rb”)
こんな感じに謎の ArgumentError になります
$ ruby19 -v foo.rb
ruby 1.9.3dev (2010-12-29 trunk 30417) [x86_64-freebsd8.2]
foo.rb:4:in utime': time out of system range (ArgumentError) from foo.rb:4:in
’
=end
むらたです。
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 して良いです。
2011$BG/(B7$B7n(B8$BF|(B19:34 Kenta M. [email protected]:
$B$G$9$+$i!“(Bbigadd_int $B$N:G=i$K(B RB_GC_GUARD $B$7$FNI$$$G$9!#(B
$B$”!"$9$$$^$;$s!#:rF|KM$N$$$J$$4V$K(B
#ruby-ja$B$G5DO@$7$F8e$m$K0\F0$5$;$k$H$$$&(B
$B7kO@$K$J$C$?$_$?$$$G$9!#(B
22:49:17 $BESCf$KIU$1$F$bL5BL$K$J$k$3$H$,$“$k(B
22:50:09
$B:G8e$8$c$J$/$F$b$$$$$1$I!”%,!<%I$,I,MW$JItJ,$N$“$H$K$J$$$H%@%a(B
22:50:41 $B7k6I$=$&$$$&;v$K$J$C$?$N$+(B
22:51:41
$B$G$O!”;d$N%Q%C%A$h$j$b$C$H$“$H$G$J$$$H$^$:$$$G$9$M(B
22:51:47 $B7P83B’E*$K(B
22:52:25 $BA0$KCV$$$F$k$NBt;3$”$j$^$9$h(B $B$?$7$+!#(B
22:52:41
xds$B$r;2>H$7$F$k:G8e$N>l=j$h$j8e$@$+$i!“F1$84X?t$N(Bwhile$B$N8e(B
22:53:15 RB_GC_GUARD$B$r$b$&$A$g$$9)IW$9$l$P$$$$$N$+$J$!(B
22:53:27 $BA4$/F1$89=B$$N%3!<%I$@$+$i(B bigsub_int
$B$K$bMW$k$+$J(B
22:53:27 [ruby-dev:40942] matz$B$K$3$&$$$o$l$?$N$G!”(B
22:53:28 {unak_away} http://mla.n-z.jp/?ruby-dev=40942
22:53:48 VC$B8~$1$N(BRB_GC_GUARD$B$O;n9T:x8m$7$?(B
22:54:16
$B%U%m!<2r@O$7$F:GE,2=$5$l$A$c$&$J$i!"9)IW$8$c$I$&$K$b$J$i$J$5$=$&$J(B
22:54:35 $B7P83E*$K(BOK$B$H$7$+$$$$$h$&$,$J$$!#(B
むらたです。
On Friday, July 8, 2011 at 7:55 PM, KOSAKI Motohiro wrote:
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としかいいようがない。
なんと、RB_GC_GUARD の意味がコンパイラの進化に伴なって変わってる事を知りませんでした。
おとなしく bigdecimal.c を見なおして来ます orz