diff --git a/racket/src/thread/atomic.rkt b/racket/src/thread/atomic.rkt index 1f052db6bf..fbf9911720 100644 --- a/racket/src/thread/atomic.rkt +++ b/racket/src/thread/atomic.rkt @@ -105,7 +105,14 @@ ;; no race with the scheduler (define (add-end-atomic-callback! cb) (host:disable-interrupts) - (end-atomic-callback (cons cb (end-atomic-callback))) + (define all-cbs (end-atomic-callback)) + (let loop ([cbs all-cbs]) + (cond + [(eq? cbs 0) + (end-atomic-callback (cons cb all-cbs))] + [else + (unless (eq? (car cbs) cb) + (loop (cdr cbs)))])) (host:enable-interrupts)) ;; ----------------------------------------