From 2ea9c6e02b17000993ba8d3f064d77ab0877ed4a Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 2 Mar 2010 16:59:06 +0000 Subject: [PATCH] fix placement of future pause-for-gc loop in JIT-generated code svn: r18429 --- src/mzscheme/src/future.c | 1 - src/mzscheme/src/jit.c | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/mzscheme/src/future.c b/src/mzscheme/src/future.c index 8db3fac22f..f00e19f1c1 100644 --- a/src/mzscheme/src/future.c +++ b/src/mzscheme/src/future.c @@ -1202,7 +1202,6 @@ static void invoke_rtcall(Scheme_Future_State * volatile fs, future_t * volatile if (scheme_setjmp(newbuf)) { mzrt_mutex_lock(fs->future_mutex); future->no_retval = 1; - future->work_completed = 1; //Signal the waiting worker thread that it //can continue running machine code mzrt_sema_post(future->can_continue_sema); diff --git a/src/mzscheme/src/jit.c b/src/mzscheme/src/jit.c index 0fd62e38a4..cc50548173 100644 --- a/src/mzscheme/src/jit.c +++ b/src/mzscheme/src/jit.c @@ -3463,6 +3463,12 @@ static int generate_self_tail_call(Scheme_Object *rator, mz_jit_state *jitter, i mz_patch_branch(refslow); __END_TINY_OR_SHORT_JUMPS__(jmp_tiny, jmp_short); + generate_pause_for_gc_and_retry(jitter, + 0, /* in short jumps */ + JIT_R0, /* expose R0 to GC */ + refagain); /* retry code pointer */ + CHECK_LIMIT(); + jitter->flostack_offset = offset; jitter->flostack_space = space; @@ -3544,10 +3550,6 @@ static int generate_self_tail_call(Scheme_Object *rator, mz_jit_state *jitter, i mz_flostack_restore(jitter, 0, 0, 1, 1); - generate_pause_for_gc_and_retry(jitter, - 0, /* in short jumps */ - JIT_R0, /* expose R0 to GC */ - refagain); /* retry code pointer */ CHECK_LIMIT(); if (args_already_in_place) {