Hi,

At Tue, 21 Jun 2005 01:11:50 +0900,
nobu.nokada / softhome.net wrote in [ruby-core:05258]:
> The cause was quite simple, GC run during saving thread context
> and thread scheduling occurred.
> 
> #24 0x0806e9c5 in garbage_collect () at gc.c:1196
> #25 0x0806efe4 in ruby_xmalloc (size=69292) at gc.c:119
> #26 0x0805767d in rb_thread_save_context (th=0x872fc38) at eval.c:9920
> #27 0x08067368 in rb_thread_start_0 (fn=0x8067480 <rb_thread_yield>, arg=0xb752a220, th=0x872fc38) at eval.c:11512
> 
> Hmmm, but I wonder how it can be fixed.

I'm feeling it seems too critical to allow GC to run.


Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.791 diff -U2 -p -r1.791 eval.c --- eval.c 20 Jun 2005 09:59:58 -0000 1.791 +++ eval.c 21 Jun 2005 04:51:42 -0000 @@ -10326,5 +10326,7 @@ rb_thread_save_context(th) th->stk_pos = pos; if (len > th->stk_max) { - REALLOC_N(th->stk_ptr, VALUE, len); + VALUE *ptr = realloc(th->stk_ptr, sizeof(VALUE) * len); + if (!ptr) rb_memerror(); + th->stk_ptr = ptr; th->stk_max = len; }
-- Nobu Nakada