[ruby-dev:24327] Re: Array#[] dumps core

From: Tanaka Akira <akr@...17n.org>
Date: 2004-09-23 16:07:07 UTC
List: ruby-dev #24327
In article <1095953751.970723.3591.nullmailer@x31.priv.netlab.jp>,
  Yukihiro Matsumoto <matz@ruby-lang.org> writes:

> あれれ、私のところではcoreを吐きません。CVS HEADとの差は
> flattenをちょっといじったかどうかだけだと思うんですが。

あまりに微妙すぎましたかね。
次のようにするとどうでしょう?

% ./ruby -e '
def f(&block)
ObjectSpace.define_finalizer(Object.new, &block)
end
6500.downto(6000) {|n|
p n
arr = (1..100).to_a
f { arr.clear; arr.compact! }
n.times { Object.new }
arr[0,100].inspect
eval "gc = false; f { gc = true }; n = 0; until gc; Object.new; n += 1; end; p n"
}
'
6500
6349
...
6379
6402
-e:10: [BUG] Segmentation fault
ruby 1.9.0 (2004-09-22) [i686-linux]

zsh: abort (core dumped)  ./ruby -e 

要するに、rb_ary_subseq から呼んでいる ary_alloc でのオブジェクト確保
のところで GC を起こして、そのときに finalizer で長さを変えているんで
すが。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread

Prev Next