From 79df0f8c3289189387a4e07e24e507445ab85a4d Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 8 Mar 2021 22:18:35 +0100 Subject: enqueue-midi-bytes: Actually enqueue, rather than waiting for empty queue This avoids a deadlock if the midi readout isn't happening for some reason. --- guile/starlet/midi-control/base.scm | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'guile/starlet/midi-control/base.scm') 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 -- cgit v1.2.3