From d2cdc315a9f6ba2ffdaffac3fa22cffacc22808a Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 26 Mar 2008 12:41:03 +0000 Subject: [PATCH] fix bug in thread-rewind-receive svn: r9090 --- collects/tests/mzscheme/sync.ss | 3 +++ src/mzscheme/src/sema.c | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/collects/tests/mzscheme/sync.ss b/collects/tests/mzscheme/sync.ss index afd819bc25..1216bdacef 100644 --- a/collects/tests/mzscheme/sync.ss +++ b/collects/tests/mzscheme/sync.ss @@ -745,6 +745,9 @@ (thread-send t 'x (lambda () (values 'a 'z))))) (err/rt-test (thread-send t 'x))) +;; make sure it's ok for rewind to be the first action: +(test (void) thread-wait (thread (lambda () (thread-rewind-receive '(1 2 3))))) + ;; ---------------------------------------- ;; Garbage collection diff --git a/src/mzscheme/src/sema.c b/src/mzscheme/src/sema.c index 5388d570f4..f68a76f28d 100644 --- a/src/mzscheme/src/sema.c +++ b/src/mzscheme/src/sema.c @@ -1053,6 +1053,8 @@ static void mbox_push_front(Scheme_Thread *p, Scheme_Object *lst) int cnt = -1; Scheme_Object *next, *hd; + make_mbox_sema(p); + next = lst; while (!SCHEME_NULLP(next)) { /* Push one: */ @@ -1065,12 +1067,10 @@ static void mbox_push_front(Scheme_Thread *p, Scheme_Object *lst) next = SCHEME_CDR(next); if (SCHEME_NULLP(next) || (cnt == 256)) { - /* Either done or need to use fuel */ - if (cnt > -1) { - /* do a single post for all messages */ - ((Scheme_Sema*)p->mbox_sema)->value += cnt; - scheme_post_sema(p->mbox_sema); - } + /* Either done or need to pause to allow breaks/swaps; */ + /* do a single post for all messages so far. */ + ((Scheme_Sema*)p->mbox_sema)->value += cnt; + scheme_post_sema(p->mbox_sema); SCHEME_USE_FUEL(cnt+1); /* might sleep */ cnt = -1; }