\f
(define (initialize-package!)
(set! primitive-gc-daemons (make-serial-queue))
- (set! trigger-primitive-gc-daemons! (make-trigger primitive-gc-daemons))
+ (set! %trigger-primitive-gc-daemons! (make-trigger primitive-gc-daemons))
(set! add-primitive-gc-daemon! (make-adder primitive-gc-daemons))
(set! add-primitive-gc-daemon!/unsafe
(make-adder/unsafe primitive-gc-daemons))
;;; allocate any storage and they must be prepared to run at times
;;; when many data structures are not consistent.
(define primitive-gc-daemons)
-(define trigger-primitive-gc-daemons!)
+(define %trigger-primitive-gc-daemons!)
(define add-primitive-gc-daemon!)
(define add-primitive-gc-daemon!/unsafe)
+(define (trigger-primitive-gc-daemons!)
+ (%trigger-primitive-gc-daemons!)
+ (if enable-smp?
+ ((ucode-primitive smp-gc-finished 0))))
+
;;; GC-DAEMONS are executed after each GC from an interrupt handler.
;;; This interrupt handler has lower priority than the GC interrupt,
;;; which guarantees that these daemons will not be run inside of
trigger-secondary-gc-daemons!)
(export (runtime interrupt-handler)
trigger-gc-daemons!)
+ (import (runtime thread)
+ enable-smp?)
(initialization (initialize-package!)))
(define-package (runtime gc-finalizer)