From: Shugo Maeda Date: 2004-12-04T03:55:39+09:00 Subject: Re: [1.9, 1.8] super Hi, ts wrote: > S> Program received signal SIGSEGV, Segmentation fault. > S> 0xb7f3ead7 in proc_invoke (proc=3084300296, args=3, self=6, klass=0) > S> at eval.c:8166 > S> 8166 _block.frame.argc = RARRAY(args)->len; > > This is why, in the patch to 1.9, it use `tmp' rather than `args' Thank you. The following patch worked. Index: eval.c =================================================================== RCS file: /var/cvs/src/ruby/eval.c,v retrieving revision 1.616.2.74 diff -u -r1.616.2.74 eval.c --- eval.c 3 Dec 2004 09:30:32 -0000 1.616.2.74 +++ eval.c 3 Dec 2004 18:54:13 -0000 @@ -8139,6 +8139,7 @@ volatile int safe = ruby_safe_level; volatile VALUE old_wrapper = ruby_wrapper; volatile int pcall, avalue = Qtrue; + volatile VALUE tmp = args; if (rb_block_given_p() && ruby_frame->last_func) { if (klass != ruby_frame->last_class) @@ -8163,9 +8164,9 @@ _block = *data; if (self != Qundef) _block.frame.self = self; if (klass) _block.frame.last_class = klass; - _block.frame.argc = RARRAY(args)->len; - _block.frame.argv = ALLOCA_N(VALUE, RARRAY(args)->len); - MEMCPY(_block.frame.argv, RARRAY(args)->ptr, VALUE, RARRAY(args)->len); + _block.frame.argc = RARRAY(tmp)->len; + _block.frame.argv = ALLOCA_N(VALUE, RARRAY(tmp)->len); + MEMCPY(_block.frame.argv, RARRAY(tmp)->ptr, VALUE, RARRAY(tmp)->len); _block.frame.flags = FRAME_ALLOCA; ruby_block = &_block;