首藤です。
このメイルが、自己紹介に続く ruby-list への 2度目のメイルかもしれません。

手元の ruby を 1.1c1 から 1.1c2 にしたところ、
多量の配列を扱うスクリプトが
  `[BUG] Segmentation fault'
と動かなくなりました。

私の手元では次のコードで再現します。
  array = Array.new(100000)
  GC.start


printf() と gdb で原因を追いました。

配列の allocate のため、array.c の ary_s_new() が呼ばれます。
で、array.c l.191
  ary->ptr = ALLOC_N(VALUE, ary->capa);
つまり、gc.c l.51 xmalloc(sizeof(VALUE), ary->capa) が呼ばれます。

xmalloc() 中で malloc() に失敗すると、gc_gc() と GC を起動するようです。
このごみ集めの最中に、GC が作りかけの配列オブジェクトを触ります。
gc.c l.508 gc_mark(*ptr++) と、作りかけの配列の要素を mark しようとして、
SIGSEGV が発生します。


…しかし、1.1c1 -> 1.1c2 でスクリプトが動かなくなったのはなぜだろう???
1.1c1 と 1.1c2 の diff を取ってみたのですが、わかりません…


自分の好きにできる、自分好みな言語をお持ちのまつもとさん、
心底うらやましいです。

SHUDO Kazuyuki/首藤一幸   私をたばねないで あらせいとうの花のように
  shudoh / muraoka.info.waseda.ac.jp