(let ((thread (weak-car entry))
(event (weak-cdr entry)))
(if (and thread event)
- (signal-thread-event
- thread
- (named-lambda (gc-event)
- (abort-if-heap-low (gc-statistic/heap-left statistic))
- (event statistic))
- #t))))
+ (without-interrupts
+ (lambda ()
+ (if (not (eq? 'DEAD (thread-execution-state thread)))
+ (%signal-thread-event
+ thread
+ (named-lambda (gc-event)
+ (abort-if-heap-low (gc-statistic/heap-left statistic))
+ (event statistic)))))))))
gc-events)))
(define (weak-assq obj alist)
(clear-interrupts! interrupt-bit/global-3)
(cond ((console-thread)
=> (lambda (thread)
- (signal-thread-event thread
- (lambda ()
- (event-distributor/invoke! event:console-resize)))))))
+ (without-interrupts
+ (lambda ()
+ (%signal-thread-event thread
+ (lambda ()
+ (event-distributor/invoke! event:console-resize)))))))))
(define ((illegal-interrupt-handler interrupt-bit)
interrupt-code interrupt-enables)
(define (signal-interrupt hook/interrupt hook/clean-input char interrupt)
(let ((thread (thread-mutex-owner (port/thread-mutex console-i/o-port))))
(if thread
- (signal-thread-event thread
+ (%signal-thread-event thread
(lambda ()
(if hook/interrupt
(hook/interrupt))
(vector-set! system-interrupt-vector character-slot
external-interrupt-handler)
(vector-set! interrupt-mask-vector character-slot
- interrupt-mask/timer-ok)
+ interrupt-mask/gc-ok)
(vector-set! system-interrupt-vector after-gc-slot
after-gc-interrupt-handler)
with-gc-notification!)
(export (runtime thread)
%deregister-gc-event)
+ (import (runtime thread)
+ %signal-thread-event)
(initialization (initialize-package!)))
(define-package (runtime gc-statistics)
generate-suspend-file?)
(export (runtime swank)
keyboard-interrupt-vector)
+ (import (runtime thread)
+ %signal-thread-event)
(initialization (initialize-package!)))
(define-package (runtime lambda-abstraction)