This project is closed and read-only.
Bug #1330
closedBigDecimal オブジェクトを何度も使い回すと Bus Error が発生することがある
Description
=begin
以下のように BigDecimal オブジェクトを何度も再利用すると BusError が起こります。
$ ~/ruby-1.8.8-r23088/bin/ruby -rbigdecimal -ve '
a = BigDecimal("10000000000000000000000000000000000000000")
b = BigDecimal("0.0000000000000000000000000000001")
1000000.times{ a + b }'
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
-e:4: [BUG] Bus Error
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
Abort trap
次のように、times のブロック内で何かを puts することで、これを回避できることが分かりました。
$ ~/ruby-1.8.8-r23088/bin/ruby -rbigdecimal -ve '
a = BigDecimal("10000000000000000000000000000000000000000")
b = BigDecimal("0.0000000000000000000000000000001")
1000000.times{ $stderr.puts ""; a + b }' 2>/dev/null
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
ところが、puts の引数を省略すると Bus Error が復活します。
$ ~/ruby-1.8.8-r23088/bin/ruby -rbigdecimal -ve '
a = BigDecimal("10000000000000000000000000000000000000000")
b = BigDecimal("0.0000000000000000000000000000001")
1000000.times{ $stderr.puts; a + b }'
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
(非常に大量の改行文字は省略)
-e:4: [BUG] Bus Error
ruby 1.8.8dev (2009-03-28) [i386-darwin9.6.0]
Abort trap
=end