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