fix placement of future pause-for-gc loop in JIT-generated code

svn: r18429
This commit is contained in:
Matthew Flatt 2010-03-02 16:59:06 +00:00
parent 0197183739
commit 2ea9c6e02b
2 changed files with 6 additions and 5 deletions

View File

@ -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);

View File

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