From 9e3bdaa3287d22fd7629c0d5b931e36f6ff034ad Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 18 Dec 2017 08:10:23 -0700 Subject: [PATCH] call-in-nested-thread: add prompt Before 544b7a3d53, an incorrect barrier check prevented applying a continuation captured in other threads from being applied in a thread created with `call-in-nested-thread`. There's no good reason to prohibit such an application, and now that the bogus check is gone, an explicit prompt is needed in the implementation to make it behave correctly. --- pkgs/racket-test-core/tests/racket/thread.rktl | 3 ++- racket/src/racket/src/thread.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/thread.rktl b/pkgs/racket-test-core/tests/racket/thread.rktl index e6966962de..c03315ec15 100644 --- a/pkgs/racket-test-core/tests/racket/thread.rktl +++ b/pkgs/racket-test-core/tests/racket/thread.rktl @@ -555,7 +555,8 @@ (sleep) 'not-void))) -(err/rt-test (let/cc k (call-in-nested-thread (lambda () (k)))) exn:fail:contract:continuation?) +(test 1 call-with-continuation-prompt (lambda () + (let/cc k (call-in-nested-thread (lambda () (k 1)))))) (err/rt-test (let/ec k (call-in-nested-thread (lambda () (k)))) exn:fail:contract:continuation?) (err/rt-test ((call-in-nested-thread (lambda () (let/cc k k)))) exn:fail:contract:continuation?) (err/rt-test ((call-in-nested-thread (lambda () (let/ec k k)))) exn:fail:contract:continuation?) diff --git a/racket/src/racket/src/thread.c b/racket/src/racket/src/thread.c index 6846e0c21f..e40f5afdb9 100644 --- a/racket/src/racket/src/thread.c +++ b/racket/src/racket/src/thread.c @@ -3731,7 +3731,7 @@ Scheme_Object *scheme_call_as_nested_thread(int argc, Scheme_Object *argv[], voi v = NULL; failure = 1; } else { - v = scheme_apply(argv[0], 0, NULL); + v = scheme_apply_with_prompt(argv[0], 0, NULL); failure = 0; }