aboutsummaryrefslogtreecommitdiff
path: root/guile/starlet/midi-control/base.scm
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-03-08 22:18:35 +0100
committerThomas White <taw@physics.org>2021-03-08 22:21:44 +0100
commit79df0f8c3289189387a4e07e24e507445ab85a4d (patch)
tree5f812f26fd314bb05ce9d9c7c08b609cde15a64a /guile/starlet/midi-control/base.scm
parent87cbe16a58c760e804ccb199a9c41b72e94cb7bb (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.scm10
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