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) {