まつもと ゆきひろです

In message "[ruby-dev:7680] [BUG] Segmentation fault"
    on 99/08/16, Yasuhiro Fukuma <yasuf / big.or.jp> writes:

|class/module blockの中で新しいスレッドを起こしたあと、GCが発生すると
|落ちるようです。

確かに。以下のパッチで直るようです。ADJ()を複数回適用してい
ました。あーあ。ついでにGCの無駄なスキャンを減らしてみました。

--- eval.c	1999/08/13 05:45:04	1.2
+++ eval.c	1999/08/16 02:51:29
@@ -6042,4 +6042,5 @@
 
     /* mark data in copied stack */
+    if (th == curr_thread) return;
     if (th->status == THREAD_KILLED) return;
     if (th->stk_len == 0) return;  /* stack not active, no need to mark. */
@@ -6055,5 +6056,5 @@
 	rb_gc_mark_frame(frame);
 	if (frame->tmp) {
-	    struct FRAME *tmp = ADJ(frame->tmp);
+	    struct FRAME *tmp = frame->tmp;
 
 	    while (tmp && tmp != top_frame) {