diff options
-rw-r--r-- | guile/starlet/midi-control/base.scm | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/guile/starlet/midi-control/base.scm b/guile/starlet/midi-control/base.scm index bcbb741..9585766 100644 --- a/guile/starlet/midi-control/base.scm +++ b/guile/starlet/midi-control/base.scm @@ -96,9 +96,13 @@ (define enqueue-midi-bytes! (lambda bytes - (unless (eq? (atomic-box-compare-and-swap! send-queue '() bytes) - '()) - (apply enqueue-midi-bytes! bytes)))) + (let* ((old-queue (atomic-box-ref send-queue)) + (new-queue (append old-queue bytes))) + (unless (eq? (atomic-box-compare-and-swap! send-queue + old-queue + new-queue) + old-queue) + (apply enqueue-midi-bytes! bytes))))) (define* (send-note-on note |