summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--module/system/repl/server.scm23
1 files 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))))