diff --git a/pkgs/racket-test-core/tests/racket/port.rktl b/pkgs/racket-test-core/tests/racket/port.rktl index 55b96b158f..ace0c7b671 100644 --- a/pkgs/racket-test-core/tests/racket/port.rktl +++ b/pkgs/racket-test-core/tests/racket/port.rktl @@ -164,6 +164,30 @@ exn:fail?) (err/rt-test (port-commit-peeked 100 never-evt always-evt /dev/null-in)) +;; A port that produces a stream of 1s, but always +;; though an evt: +(let () + (define stubborn-infinite-ones + (make-input-port + 'ones + (lambda (s) + (wrap-evt always-evt + (lambda (ae) + (bytes-set! s 0 (char->integer #\1)) + 1))) + (lambda (s skip-n progress-evt) + (wrap-evt always-evt + (lambda (ae) + (bytes-set! s 0 (char->integer #\1)) + 1))) + void)) + (test "11111" read-string 5 stubborn-infinite-ones) + (test "11111" peek-string 5 0 stubborn-infinite-ones) + (test #t byte-ready? stubborn-infinite-ones) + (test #t char-ready? stubborn-infinite-ones) + (test "11111" read-string 5 stubborn-infinite-ones) + (test stubborn-infinite-ones sync/timeout 0 stubborn-infinite-ones)) + ;; A port that produces a stream of 1s: (define infinite-ones (make-input-port diff --git a/racket/src/cs/schemified/io.scm b/racket/src/cs/schemified/io.scm index 124d7bf3f7..2690093269 100644 --- a/racket/src/cs/schemified/io.scm +++ b/racket/src/cs/schemified/io.scm @@ -28732,7 +28732,12 @@ (|#%app| byte-ready_0 in_1 void))) (begin (unsafe-end-atomic) - (eq? #t r_0))))))))))))) + (let ((or-part_0 (eq? #t r_0))) + (if or-part_0 + or-part_0 + (if r_0 + (if (sync/timeout 0 r_0) #t #f) + #f))))))))))))))) (loop_0 (->core-input-port.1 unsafe-undefined in_0 #f)))))))))) (|#%name| diff --git a/racket/src/io/port/ready.rkt b/racket/src/io/port/ready.rkt index a23dd4ea20..5f5398b0a2 100644 --- a/racket/src/io/port/ready.rkt +++ b/racket/src/io/port/ready.rkt @@ -26,7 +26,8 @@ (check-not-closed who in) (define r (byte-ready in void)) (end-atomic) - (eq? #t r)]))) + (or (eq? #t r) + (and r (sync/timeout 0 r) #t))]))) (define/who (char-ready? [in (current-input-port)]) (check who input-port? in)