cs: fix stdio/syslog GC logging as triggered by future thread
Always use the main `rktio` instance and don't try to explicitly start atomic mode.
This commit is contained in:
parent
309a0c2489
commit
b64e17388f
|
@ -144,7 +144,7 @@
|
|||
;; like `log-level?*`
|
||||
(define (log-message* logger level topic message data prefix? in-interrupt?)
|
||||
(define msg #f)
|
||||
(when ((logger-max-wanted-level logger) . level>=? . level)
|
||||
(when ((logger-max-wanted-level* logger) . level>=? . level)
|
||||
(let loop ([logger logger])
|
||||
(for ([r (in-list (logger-receivers logger))])
|
||||
(when ((filters-level-for-topic (log-receiver-filters r) topic) . level>=? . level)
|
||||
|
|
|
@ -94,11 +94,12 @@
|
|||
|
||||
;; ----------------------------------------
|
||||
|
||||
(struct stdio-log-receiver log-receiver (which)
|
||||
(struct stdio-log-receiver log-receiver (rktio which)
|
||||
#:property
|
||||
prop:receiver-send
|
||||
(lambda (lr msg)
|
||||
;; called in atomic mode and possibly in host interrupt handler
|
||||
(define rktio (stdio-log-receiver-rktio lr))
|
||||
(define fd (rktio_std_fd rktio (stdio-log-receiver-which lr)))
|
||||
(define bstr (bytes-append (string->bytes/utf-8 (vector-ref msg 1)) #"\n"))
|
||||
(define len (bytes-length bstr))
|
||||
|
@ -113,6 +114,7 @@
|
|||
(define (add-stdio-log-receiver! who logger args parse-who which)
|
||||
(check who logger? logger)
|
||||
(define lr (stdio-log-receiver (parse-filters parse-who args #:default-level 'none)
|
||||
rktio
|
||||
which))
|
||||
(atomically
|
||||
(add-log-receiver! logger lr #f)
|
||||
|
@ -126,11 +128,12 @@
|
|||
|
||||
;; ----------------------------------------
|
||||
|
||||
(struct syslog-log-receiver log-receiver (cmd)
|
||||
(struct syslog-log-receiver log-receiver (rktio cmd)
|
||||
#:property
|
||||
prop:receiver-send
|
||||
(lambda (lr msg)
|
||||
;; called in atomic mode and possibly in host interrupt handler
|
||||
(define rktio (syslog-log-receiver-rktio lr))
|
||||
(define bstr (bytes-append (string->bytes/utf-8 (vector-ref msg 1)) #"\n"))
|
||||
(define pri
|
||||
(case (vector-ref msg 0)
|
||||
|
@ -143,6 +146,7 @@
|
|||
|
||||
(define/who (add-syslog-log-receiver! logger . args)
|
||||
(define lr (syslog-log-receiver (parse-filters 'make-syslog-log-receiver args #:default-level 'none)
|
||||
rktio
|
||||
(path-bytes (find-system-path 'run-file))))
|
||||
(atomically
|
||||
(add-log-receiver! logger lr #f)
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
(provide logger-wanted-level ; ok to call in host-Scheme interrupt handler
|
||||
logger-max-wanted-level
|
||||
logger-max-wanted-level*
|
||||
logger-all-levels)
|
||||
|
||||
;; in atomic mode with interrupts disabled
|
||||
|
@ -31,6 +32,10 @@
|
|||
|
||||
(define (logger-max-wanted-level logger)
|
||||
(atomically/no-interrupts/no-wind
|
||||
(logger-max-wanted-level* logger)))
|
||||
|
||||
;; in atomic mode with interrupts disabled
|
||||
(define (logger-max-wanted-level* logger)
|
||||
(cond
|
||||
[((logger-local-level-timestamp logger) . >= . (unbox (logger-root-level-timestamp-box logger)))
|
||||
;; Cached value is up-to-date
|
||||
|
@ -38,7 +43,7 @@
|
|||
[else
|
||||
;; Traverse to set cache:
|
||||
(update-logger-wanted-level! logger #f)
|
||||
(logger-max-receiver-level logger)])))
|
||||
(logger-max-receiver-level logger)]))
|
||||
|
||||
(define (update-logger-wanted-level! logger topic)
|
||||
(unless ((logger-local-level-timestamp logger) . >= . (unbox (logger-root-level-timestamp-box logger)))
|
||||
|
|
Loading…
Reference in New Issue
Block a user