fix a bug related to the implicit prompt in a thread taking over the role of an explicit prompt
svn: r5887
This commit is contained in:
parent
12730df706
commit
555e5376a3
|
@ -1667,6 +1667,27 @@
|
|||
(test '(1 2 3 4 5 1 2 3 4 5 1 6 6 2 3 4 5 1 6 6) go (default-continuation-prompt-tag) #f)
|
||||
(test '(1 2 3 4 5 1 2 3 4 5 1 6 6 2 3 4 5 1 6 6) go (make-continuation-prompt-tag) #f))
|
||||
|
||||
;; ----------------------------------------
|
||||
;; Run two levels of continuations where an explicit
|
||||
;; prompt in a capturing thread is represented by an
|
||||
;; implicit prompt in the calling thread.
|
||||
|
||||
(let ()
|
||||
(define (foo thunk)
|
||||
(call-with-continuation-prompt
|
||||
(lambda ()
|
||||
(let/cc ret
|
||||
(let ([run? #f])
|
||||
(let/cc run
|
||||
(thread (lambda ()
|
||||
(sync (system-idle-evt))
|
||||
(set! run? #t)
|
||||
(run))))
|
||||
(when run? (ret (thunk))))))))
|
||||
(define s (make-semaphore))
|
||||
(foo (lambda () (semaphore-post s)))
|
||||
(test s sync s))
|
||||
|
||||
;; ----------------------------------------
|
||||
;; Try long chain of composable continuations
|
||||
|
||||
|
|
|
@ -5961,7 +5961,7 @@ Scheme_Object *scheme_jump_to_continuation(Scheme_Object *obj, int num_rands, Sc
|
|||
created with a new thread or a barrier prompt. */
|
||||
p->meta_continuation = NULL; /* since prompt wasn't in any meta-continuation */
|
||||
p->meta_prompt = NULL;
|
||||
if (c->barrier_prompt == barrier_prompt) {
|
||||
if ((c->barrier_prompt == barrier_prompt) && barrier_prompt) {
|
||||
/* Barrier determines continuation end. */
|
||||
c->resume_to = NULL;
|
||||
p->stack_start = c->stack_start;
|
||||
|
|
Loading…
Reference in New Issue
Block a user