Hi,

In message "Re: Segfault in Ruby 1.7.x/1.8 Proc#to_s"
    on 02/12/30, Michael Granger <ged / FaerieMUD.org> writes:

|> Could you show me
|>
|>   p node
|>   p *node
|>   p *data
|>
|> here?
|
|Program received signal SIGSEGV, Segmentation fault.
|0x4005c8c6 in proc_to_s (self=1076502348, other=1076214464) at 
|    eval.c:6736
|6736            len += strlen(node->nd_file) + 2 + 
|    (SIZEOF_LONG*CHAR_BIT-NODE_LSHIFT)/3;
|(gdb) p node
|$1 = (NODE *) 0x402cd228
|
|(gdb) p *node
|$2 = {flags = 61, nd_file = 0x0, u1 = {node = 0x0, id = 0, value = 0, 
|    cfunc = 0, tbl = 0x0}, u2 = {node = 0x0, id = 0, argc = 0, value =
|    0}, u3 = {node = 0x0, id = 0, state = 0, entry = 0x0, cnt = 0, value
|    = 0}}
|
|(gdb) p *data
|$3 = {var = 0x402cd368, body = 0x402cd250, self = 1076591148, frame =
|    {self = 1076443644, argc = 0, argv = 0x0, last_func = 0, orig_func =
|    1076443644, last_class = 0, cbase = 1076522288, prev = 0x8128660,
|    tmp = 0x0, node = 0x402cd228, iter = 0, flags = 0}, scope =
|    0x402a6d44, tag = 0x402a2280, klass = 1076591148, iter = 0, vmode =
|    2, flags = 3, dyna_vars = 0x0, orig_thread = 1076424564, wrapper =
|    0, prev = 0x0}

Would this patch help you?

--- gc.c	29 Dec 2002 14:51:22 -0000	1.114
+++ gc.c	30 Dec 2002 12:12:04 -0000
@@ -1133,2 +1133,3 @@ rb_gc_mark_frame(frame)
     rb_gc_mark(frame->cbase);
+    rb_gc_mark((VALUE)frame->node);
 }