Revise with-logging-to-port to avoid the extra dummy log entry.
original commit: 47f48c08ad4aaa5d33b8dd9ac91f7228e7cfc2b5
This commit is contained in:
parent
0f51793f04
commit
191c3b4601
|
@ -6,18 +6,32 @@
|
|||
test-opt test-missed-optimization)
|
||||
|
||||
(define (with-logging-to-port port level proc)
|
||||
(let* ([logger (current-logger)]
|
||||
[receiver (make-log-receiver logger level)]
|
||||
[stop-key (gensym)]
|
||||
(let* ([logger (make-logger #f (current-logger))]
|
||||
[receiver (make-log-receiver logger level)]
|
||||
[stop-chan (make-channel)]
|
||||
[t (thread (lambda ()
|
||||
(define (output-event l)
|
||||
(displayln (vector-ref l 1) ; actual message
|
||||
port))
|
||||
(define (clear-events)
|
||||
(let ([l (sync/timeout 0 receiver)])
|
||||
(when l ; still something to read
|
||||
(output-event l)
|
||||
(clear-events))))
|
||||
(let loop ()
|
||||
(let ([l (sync receiver)])
|
||||
(unless (eq? (vector-ref l 2) stop-key)
|
||||
(displayln (vector-ref l 1) ; actual message
|
||||
port)
|
||||
(loop))))))])
|
||||
(begin0 (proc)
|
||||
(log-message logger level "" stop-key) ; stop the receiver thread
|
||||
(let ([l (sync receiver stop-chan)])
|
||||
(cond [(eq? l 'stop)
|
||||
;; we received all the events we were supposed
|
||||
;; to get, read them all (w/o waiting), then
|
||||
;; stop
|
||||
(clear-events)]
|
||||
[else ; keep going
|
||||
(output-event l)
|
||||
(loop)])))))])
|
||||
(begin0
|
||||
(parameterize ([current-logger logger])
|
||||
(proc))
|
||||
(channel-put stop-chan 'stop) ; stop the receiver thread
|
||||
(thread-wait t))))
|
||||
;; TODO put in unstable somewhere
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user