From 3acb1a516246171a13092f11fc20a2ebe9ccca1c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 8 Oct 2018 15:27:53 -0600 Subject: [PATCH] cs: fix build with non-threaded scheme --- racket/src/cs/demo/io.ss | 61 ++++++++++++++++++------------------ racket/src/cs/rumble/lock.ss | 2 +- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/racket/src/cs/demo/io.ss b/racket/src/cs/demo/io.ss index 094398e2ba..76fb3e2f5b 100644 --- a/racket/src/cs/demo/io.ss +++ b/racket/src/cs/demo/io.ss @@ -134,37 +134,38 @@ ;; ---------------------------------------- - - (let* ([place-symbols (make-hasheq)] - [register-place-symbol! - (lambda (sym proc) - (hash-set! place-symbols sym proc))]) - (set-make-place-ports+fds! make-place-ports+fds) - (set-start-place! - (lambda (pch mod sym in out err cust plumber) - (io-place-init! in out err cust plumber) - (lambda () - ((hash-ref place-symbols sym) pch)))) - ;; Check file port passed across places - (let ([f (open-input-file "compiled/io.scm")]) - (file-stream-buffer-mode f 'none) - (let ([content (read-bytes 5 f)]) - (file-position f 0) - - (register-place-symbol! 'read-byte - (lambda (pch) - (let ([f (place-channel-get pch)]) - (file-stream-buffer-mode f 'none) - (let ([b (read-byte f)]) - (close-input-port f) - (place-channel-put pch b))))) - (let-values ([(pl in out err) (dynamic-place 'dummy 'read-byte #f #f #f)]) - (test (bytes-ref content 0) (read-byte f)) - (place-channel-put pl f) - (test (bytes-ref content 1) (place-channel-get pl)) - (test (bytes-ref content 2) (read-byte f)) - (close-input-port f))))) + (when (threaded?) + (let* ([place-symbols (make-hasheq)] + [register-place-symbol! + (lambda (sym proc) + (hash-set! place-symbols sym proc))]) + (set-make-place-ports+fds! make-place-ports+fds) + (set-start-place! + (lambda (pch mod sym in out err cust plumber) + (io-place-init! in out err cust plumber) + (lambda () + ((hash-ref place-symbols sym) pch)))) + + ;; Check file port passed across places + (let ([f (open-input-file "compiled/io.scm")]) + (file-stream-buffer-mode f 'none) + (let ([content (read-bytes 5 f)]) + (file-position f 0) + + (register-place-symbol! 'read-byte + (lambda (pch) + (let ([f (place-channel-get pch)]) + (file-stream-buffer-mode f 'none) + (let ([b (read-byte f)]) + (close-input-port f) + (place-channel-put pch b))))) + (let-values ([(pl in out err) (dynamic-place 'dummy 'read-byte #f #f #f)]) + (test (bytes-ref content 0) (read-byte f)) + (place-channel-put pl f) + (test (bytes-ref content 1) (place-channel-get pl)) + (test (bytes-ref content 2) (read-byte f)) + (close-input-port f)))))) ;; Thread can be GCed if it's block on a place channel with no writer (let () diff --git a/racket/src/cs/rumble/lock.ss b/racket/src/cs/rumble/lock.ss index 0e7e2729cc..8ee70ad1a5 100644 --- a/racket/src/cs/rumble/lock.ss +++ b/racket/src/cs/rumble/lock.ss @@ -47,7 +47,7 @@ ;; engine-based concurrency (define-syntax-rule (with-global-lock e ...) (with-interrupts-disabled - e))] + e ...))] [else ;; Using a Chez Scheme build with thread support; make hash-table ;; access thread-safe at that level for `eq?`- and `eqv?`-based