From e5a9dcb9d8863fc2ad44c4f85a10a95329e3c154 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 28 Jun 2003 03:29:00 +0000 Subject: * configure.in (rb_cv_stack_grow_dir): check stack growing direction. * eval.c (rb_thread_restore_context): prior configuration macro. * gc.c (ruby_stack_length): always return the address of lower edge. * gc.c (rb_gc_mark_locations): remove margin. [ruby-dev:20462] * gc.c (rb_gc, Init_stack): prior configuration macro. * gc.c (Init_stack): add safety margin. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- eval.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'eval.c') diff --git a/eval.c b/eval.c index 0468d37dc9..272d2f74f5 100644 --- a/eval.c +++ b/eval.c @@ -8112,8 +8112,7 @@ rb_thread_save_context(th) len = ruby_stack_length(&pos); th->stk_len = 0; - th->stk_pos = (rb_gc_stack_startstk_pos = pos; if (len > th->stk_max) { REALLOC_N(th->stk_ptr, VALUE, len); th->stk_max = len; @@ -8211,6 +8210,11 @@ rb_thread_restore_context(th, exit) if (!th->stk_ptr) rb_bug("unsaved context"); +#if STACK_GROW_DIRECTION < 0 + if (&v > th->stk_pos) stack_extend(th, exit); +#elif STACK_GROW_DIRECTION > 0 + if (&v < th->stk_pos + th->stk_len) stack_extend(th, exit); +#else if (&v < rb_gc_stack_start) { /* Stack grows downward */ if (&v > th->stk_pos) stack_extend(th, exit); @@ -8219,6 +8223,7 @@ rb_thread_restore_context(th, exit) /* Stack grows upward */ if (&v < th->stk_pos + th->stk_len) stack_extend(th, exit); } +#endif rb_trap_immediate = 0; /* inhibit interrupts from here */ ruby_frame = th->frame; -- cgit v1.2.3