diff options
author | Thomas White <taw@physics.org> | 2021-03-08 22:18:35 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2021-03-08 22:21:44 +0100 |
commit | 79df0f8c3289189387a4e07e24e507445ab85a4d (patch) | |
tree | 5f812f26fd314bb05ce9d9c7c08b609cde15a64a /guile/starlet/midi-control/base.scm | |
parent | 87cbe16a58c760e804ccb199a9c41b72e94cb7bb (diff) |
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.
Diffstat (limited to 'guile/starlet/midi-control/base.scm')
-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 |