futures bug fixes
svn: r16844
This commit is contained in:
parent
a145f096cb
commit
72f4eec8c8
|
@ -2,7 +2,7 @@
|
|||
#ifndef __mzscheme_gc_2__
|
||||
#define __mzscheme_gc_2__
|
||||
|
||||
#ifdef MZ_USE_PLACES
|
||||
#if defined(MZ_USE_PLACES) || defined(FUTURES_ENABLED)
|
||||
# if _MSC_VER
|
||||
# define THREAD_LOCAL __declspec(thread)
|
||||
# else
|
||||
|
|
|
@ -367,7 +367,7 @@ Scheme_Object *future(int argc, Scheme_Object *argv[])
|
|||
pthread_cond_signal(&g_future_pending_cv);
|
||||
pthread_mutex_unlock(&g_future_queue_mutex);
|
||||
|
||||
return scheme_make_integer(futureid);
|
||||
return (Scheme_Object*)ft;
|
||||
END_XFORM_SKIP;
|
||||
}
|
||||
|
||||
|
@ -399,29 +399,14 @@ Scheme_Object *touch(int argc, Scheme_Object *argv[])
|
|||
Scheme_Object *retval = NULL;
|
||||
void *rtcall_retval = NULL;
|
||||
future_t *ft;
|
||||
int futureid;
|
||||
|
||||
futureid = SCHEME_INT_VAL(argv[0]);
|
||||
ft = (future_t*)argv[0];
|
||||
|
||||
#ifdef DEBUG_FUTURES
|
||||
LOG("touch (future %d)", futureid);
|
||||
dump_state();
|
||||
|
||||
if (SCHEME_INTP(argv[0]))
|
||||
{
|
||||
printf("Future id passed to touch was %d, is a Scheme integer.\n", futureid);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Arg passed to touch was a %d.\n", SCHEME_TYPE(argv[0]));
|
||||
}
|
||||
fflush(stdout);
|
||||
#endif
|
||||
|
||||
pthread_mutex_lock(&g_future_queue_mutex);
|
||||
ft = get_future(futureid);
|
||||
pthread_mutex_unlock(&g_future_queue_mutex);
|
||||
|
||||
//Spin waiting for primitive calls or a return value from
|
||||
//the worker thread
|
||||
wait_for_rtcall_or_completion:
|
||||
|
@ -888,6 +873,7 @@ future_t *enqueue_future(void)
|
|||
future_t *last = get_last_future();
|
||||
future_t *ft = (future_t*)malloc(sizeof(future_t));
|
||||
memset(ft, 0, sizeof(future_t));
|
||||
ft->so.type = scheme_future_type;
|
||||
if (NULL == last)
|
||||
{
|
||||
g_future_queue = ft;
|
||||
|
|
|
@ -5422,9 +5422,9 @@ static int future_MARK(void *p) {
|
|||
future_t *f = (future_t *)p;
|
||||
gcMARK(f->runstack);
|
||||
gcMARK(f->runstack_start);
|
||||
gcMARK(f->orig_thread);
|
||||
gcMARK(f->orig_lambda);
|
||||
gcMARK(f->rt_prim_args);
|
||||
gcMARK(f->rt_prim_result);
|
||||
gcMARK(f->rt_prim_retval);
|
||||
gcMARK(f->retval);
|
||||
gcMARK(f->prev);
|
||||
gcMARK(f->next);
|
||||
|
@ -5436,9 +5436,9 @@ static int future_FIXUP(void *p) {
|
|||
future_t *f = (future_t *)p;
|
||||
gcFIXUP(f->runstack);
|
||||
gcFIXUP(f->runstack_start);
|
||||
gcFIXUP(f->orig_thread);
|
||||
gcFIXUP(f->orig_lambda);
|
||||
gcFIXUP(f->rt_prim_args);
|
||||
gcFIXUP(f->rt_prim_result);
|
||||
gcFIXUP(f->rt_prim_retval);
|
||||
gcFIXUP(f->retval);
|
||||
gcFIXUP(f->prev);
|
||||
gcFIXUP(f->next);
|
||||
|
|
Loading…
Reference in New Issue
Block a user