From 6596821faf23a6ccf8ed7655f8afa8db72cc4afb Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 30 Jan 2007 02:02:55 +0000 Subject: [PATCH] fix runstack clearing for non-JIT mode svn: r5504 --- src/mzscheme/src/thread.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mzscheme/src/thread.c b/src/mzscheme/src/thread.c index 2cdba5f41b..08bfbbab10 100644 --- a/src/mzscheme/src/thread.c +++ b/src/mzscheme/src/thread.c @@ -6647,6 +6647,7 @@ static void prepare_thread_for_GC(Scheme_Object *t) if (!p->runstack_owner || (p == *p->runstack_owner)) { long rs_end; + Scheme_Object **rs_start; /* If there's a meta-prompt, we can also zero out past the unused part */ if (p->meta_prompt && (p->meta_prompt->runstack_boundary_start == p->runstack_start)) { @@ -6655,9 +6656,15 @@ static void prepare_thread_for_GC(Scheme_Object *t) rs_end = p->runstack_size; } + if ((p->runstack_tmp_keep >= p->runstack_start) + && (p->runstack_tmp_keep < p->runstack)) + rs_start = p->runstack_tmp_keep; + else + rs_start = p->runstack; + scheme_set_runstack_limits(p->runstack_start, p->runstack_size, - p->runstack - p->runstack_start, + rs_start - p->runstack_start, rs_end); RUNSTACK_TUNE( size = p->runstack_size - (p->runstack - p->runstack_start); );