From 4f669f0d7e1d5886cae80d0729915fb30e0ff892 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 5 Dec 2011 19:08:51 -0700 Subject: [PATCH] fix futures handling of tail-call results --- src/racket/src/future.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/racket/src/future.c b/src/racket/src/future.c index 9c466006b2..3bae38dfab 100644 --- a/src/racket/src/future.c +++ b/src/racket/src/future.c @@ -1753,7 +1753,7 @@ Scheme_Object *general_touch(int argc, Scheme_Object *argv[]) the worker thread */ while (1) { mzrt_mutex_lock(fs->future_mutex); - if ((((ft->status == PENDING) + if ((((ft->status == PENDING) && prefer_to_apply_future_in_runtime()) || (ft->status == PENDING_OVERSIZE) || (ft->status == SUSPENDED)) @@ -2823,7 +2823,7 @@ static void send_special_result(future_t *f, Scheme_Object *retval) p->ku.apply.tail_rator = NULL; p->ku.apply.tail_rands = NULL; - if (p->ku.apply.tail_rands == p->tail_buffer) { + if (f->tail_rands == p->tail_buffer) { /* This only happens in the runtime thread; we need to disconnect the tail buffer from `f->tail_rands' in case of a GC. Beware that XFORM is disabled here. */