From: matz@... (Yukihiro Matsumoto) Date: 1998-08-13T15:02:24+09:00 Subject: [ruby-list:9094] Re: GC touches an array which is failed to be allocated. まつもと ゆきひろです In message "[ruby-list:9083] GC touches an array which is failed to be allocated." on 98/08/12, SHUDOH Kazuyuki writes: |首藤です。 |手元の ruby を 1.1c1 から 1.1c2 にしたところ、 |多量の配列を扱うスクリプトが | `[BUG] Segmentation fault' |と動かなくなりました。 バグがありました. |xmalloc() 中で malloc() に失敗すると、gc_gc() と GC を起動するようです。 |このごみ集めの最中に、GC が作りかけの配列オブジェクトを触ります。 |gc.c l.508 gc_mark(*ptr++) と、作りかけの配列の要素を mark しようとして、 |SIGSEGV が発生します。 的確なレポート感謝します.パッチを付けておきます. |自分の好きにできる、自分好みな言語をお持ちのまつもとさん、 |心底うらやましいです。 でしょぉ? 首藤さんも作りませんか? # 私の場合,10年以上掛かりましたけど. --- array.c 1998/07/29 09:50:23 1.1.1.2.2.28 +++ array.c 1998/08/13 05:59:18 @@ -169,2 +169,3 @@ { + int len = 0; VALUE size, val; @@ -188,6 +189,7 @@ ary->capa = capa; - ary->len = capa; + len = capa; } ary->ptr = ALLOC_N(VALUE, ary->capa); - memfill(ary->ptr, ary->len, val); + memfill(ary->ptr, len, val); + ary->len = len; obj_call_init((VALUE)ary);