cs: fix log-level? and related

Broken cache clearing caused out-of-date results to be returned
sometimes.
This commit is contained in:
Matthew Flatt 2020-02-04 18:04:52 -07:00
parent e45d0ab9d8
commit f615be26a3
2 changed files with 15 additions and 1 deletions

View File

@ -334,6 +334,20 @@
(log-message logger 'error "hi")
(test '#(error "hi" #f #f) sync m))
; --------------------
;; Regression test to make sure cache clearing is not broken:
(let ([logger (make-logger)])
(test #f log-level? logger 'debug 'test-a)
(test #f log-level? logger 'debug 'test-b)
(test #f log-level? logger 'debug 'test-c)
(define r2 (make-log-receiver logger 'debug 'test-b))
(test #f log-level? logger 'debug 'test-a)
(test #t log-level? logger 'debug 'test-b)
(test #f log-level? logger 'debug 'test-c)
;; Retain receiver
(test #f sync/timeout 0 r2))
; --------------------
(report-errs)

View File

@ -48,7 +48,7 @@
(define (update-logger-wanted-level! logger topic)
(unless ((logger-local-level-timestamp logger) . >= . (unbox (logger-root-level-timestamp-box logger)))
(define cache (logger-topic-level-cache logger))
(for/or ([i (in-range 0 (vector-length cache) 2)])
(for ([i (in-range 0 (vector-length cache) 2)])
(vector-set! cache i #f))
(set-logger-local-level-timestamp! logger (unbox (logger-root-level-timestamp-box logger))))
;; As we traverse the parent chain, keep track of the "ceiling"