From: Tanaka Akira Date: 2004-09-24T01:07:07+09:00 Subject: [ruby-dev:24327] Re: Array#[] dumps core In article <1095953751.970723.3591.nullmailer@x31.priv.netlab.jp>, Yukihiro Matsumoto 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]