Flush stderr in __eprint

The stderr seam wrote to current-error-port without flushing, so a process that
never returns from -main (a server loop) left its log lines in a buffer that only
drained at exit — they never appeared. Flush each write, like the JVM's
auto-flushing System.err.
This commit is contained in:
Yogthos 2026-06-24 01:27:49 -04:00
parent 66ad475722
commit 66236628db

View file

@ -85,10 +85,18 @@
(define (jolt-with-out-str thunk) (define (jolt-with-out-str thunk)
(with-output-to-string (lambda () (jolt-invoke thunk)))) (with-output-to-string (lambda () (jolt-invoke thunk))))
;; __eprint / __eprintf: stderr seams. ;; __eprint / __eprintf: stderr seams. Flush each write — like the JVM's
(define (jolt-eprint s) (display s (current-error-port)) jolt-nil) ;; auto-flushing System.err — so a long-running process (a server that never
;; returns from -main) shows its log lines instead of leaving them in a buffer
;; that only drains at exit.
(define (jolt-eprint s)
(display s (current-error-port))
(flush-output-port (current-error-port))
jolt-nil)
(define (jolt-eprintf fmt . args) (define (jolt-eprintf fmt . args)
(apply fprintf (current-error-port) fmt args) jolt-nil) (apply fprintf (current-error-port) fmt args)
(flush-output-port (current-error-port))
jolt-nil)
(def-var! "clojure.core" "__pr-str1" jolt-pr-str1) (def-var! "clojure.core" "__pr-str1" jolt-pr-str1)
(def-var! "clojure.core" "__write" jolt-write) (def-var! "clojure.core" "__write" jolt-write)