From: Yukihiro Matsumoto Date: 2004-11-17T03:48:45+09:00 Subject: [ruby-dev:24880] Re: A Float-related race in GC? まつもと ゆきひろです In message "Re: [ruby-dev:24879] Re: A Float-related race in GC?" on Wed, 17 Nov 2004 00:16:56 +0900, akira yamada / やまだあきら writes: | |2004-11-16 (火) の 23:44 +0900 に Yukihiro Matsumoto さんは書きました: |> まつもと ゆきひろです |> rb_assoc_new()の引数がなぜだかGCされちゃうようです。以下のパッ |> チで _とりあえず_ 問題が起きなくなります。 | |パッチが入った後のruby_1_8の先頭で試したところ |[ frac * 3.4 ] は起きなくなりました。 | |が、[ Array.new(int%50, int) ] だけにしますと |method `%' called on terminated object になり、 |もともとの [ frac * 3.4, Array.new(int%50) ] はSEGVでした。 うちではどういうわけだか発生しなくなってしまったので確認でき ません。以下のパッチで状況が変化しますか? --- numeric.c 16 Nov 2004 14:54:49 -0000 1.101.2.12 +++ numeric.c 16 Nov 2004 18:45:46 -0000 @@ -717,2 +717,3 @@ flo_divmod(x, y) double fy, div, mod; + volatile VALUE a, b; @@ -732,5 +733,5 @@ flo_divmod(x, y) flodivmod(RFLOAT(x)->value, fy, &div, &mod); - x = rb_float_new(div); - y = rb_float_new(mod); - return rb_assoc_new(x, y); + a = rb_float_new(div); + b = rb_float_new(mod); + return rb_assoc_new(a, b); }