anchor.diff:  
   (defun sound-worker (device)
     (loop
  -     (mezzano.supervisor:with-mutex (*sink-lock*)
  -       ;; Wait for at least one sink.
  -       (loop
  -          (when (not (endp *sinks*))
  -            (return))
  -          (mezzano.supervisor:condition-wait *sink-cvar* *sink-lock*)))
  +     (sync:wait-for-objects *sinks-present-event*
  +                            (or (sound-card-presence-event device)
  +                                (sync:always-false-event)))
        ;; There are sinks. Start the card.
        (format t "Starting playback on ~S~%" device)
        (sound-card-run device 'refill-sound-output-buffer)
  
positive.code:                               (lambda (sink)
                                  (buffer-empty sink))
                                *sinks*))
                 ;; Samples have been consumed, wake fillers.
                 (mezzano.supervisor:condition-notify *sink-cvar* t)
                 ;; Leave the card running.
  
negative.code: 
  (defpackage :mezzano.driver.sound
    (:use :cl)
    (:local-nicknames (:sync :mezzano.sync)
                      (:sup :mezzano.supervisor))
    (:export #:sound-card
             #:register-sound-card
             #:sound-card-run
             #:sound-card-presence-event
             #:master-volume
             #:make-sound-output-sink
             #:sink-volume
  