From 5f93cc8a653e47dd8c426101567f2b91c4e3482d Mon Sep 17 00:00:00 2001 From: Eddy Pedroni Date: Thu, 24 Jul 2025 18:59:30 +0200 Subject: Fix race condition, check port before sending message --- daemon/src/device_connection.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/daemon/src/device_connection.h b/daemon/src/device_connection.h index 58ddd7f..5f2b051 100644 --- a/daemon/src/device_connection.h +++ b/daemon/src/device_connection.h @@ -7,6 +7,7 @@ #include #include +#include namespace midi_router { @@ -27,11 +28,13 @@ struct Device_Connection : public Sender Submitter & submitter; RtMidiIn midi_in {}; RtMidiOut midi_out {}; + std::mutex mutex {}; void send(std::vector const & payload) override { - midi_out.sendMessage(&payload); + const std::lock_guard lock(mutex); + if (midi_out.isPortOpen()) midi_out.sendMessage(&payload); } std::string @@ -43,6 +46,7 @@ struct Device_Connection : public Sender void connect(std::size_t port) { + const std::lock_guard lock(mutex); if (!midi_in.isPortOpen()) midi_in.openPort(port); if (!midi_out.isPortOpen()) midi_out.openPort(port); } @@ -50,6 +54,7 @@ struct Device_Connection : public Sender void disconnect() { + const std::lock_guard lock(mutex); if (midi_in.isPortOpen()) midi_in.closePort(); if (midi_out.isPortOpen()) midi_out.closePort(); } -- cgit v1.2.3