From 94a3433b9d1da4acf2737aa1db8ce129b90623d9 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Mon, 31 Oct 2016 22:13:30 +0100 Subject: [PATCH] REPL server avoids thread cleanup handlers * module/system/repl/server.scm (serve-client): Avoid thread cleanup handlers. --- module/system/repl/server.scm | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/module/system/repl/server.scm b/module/system/repl/server.scm index b1b8a6b8c..f6981edf0 100644 --- a/module/system/repl/server.scm +++ b/module/system/repl/server.scm @@ -133,16 +133,17 @@ (define (serve-client client addr) (let ((thread (current-thread))) - ;; Close the socket when this thread exits, even if canceled. - (set-thread-cleanup! thread (lambda () (close-socket! client))) - ;; Arrange to cancel this thread to forcefully shut down the socket. + ;; To shut down this thread and socket, cause it to unwind. (add-open-socket! client (lambda () (cancel-thread thread)))) - (with-continuation-barrier - (lambda () - (parameterize ((current-input-port client) - (current-output-port client) - (current-error-port client) - (current-warning-port client)) - (with-fluids ((*repl-stack* '())) - (start-repl)))))) + (dynamic-wind + (lambda () #f) + (with-continuation-barrier + (lambda () + (parameterize ((current-input-port client) + (current-output-port client) + (current-error-port client) + (current-warning-port client)) + (with-fluids ((*repl-stack* '())) + (start-repl))))) + (lambda () (close-socket! client))))