diff options
author | Eddy Pedroni <epedroni@pm.me> | 2025-07-24 18:59:30 +0200 |
---|---|---|
committer | Eddy Pedroni <epedroni@pm.me> | 2025-07-24 18:59:30 +0200 |
commit | 5f93cc8a653e47dd8c426101567f2b91c4e3482d (patch) | |
tree | f64a300f1811f847b016515759be79da6fed8d43 | |
parent | 8d3dfa11baa8b2be32e0a9d31575469e1a7037b8 (diff) |
Fix race condition, check port before sending message
-rw-r--r-- | daemon/src/device_connection.h | 7 |
1 files changed, 6 insertions, 1 deletions
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 <rtmidi/RtMidi.h> #include <string> +#include <mutex> 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<std::uint8_t> const & payload) override { - midi_out.sendMessage(&payload); + const std::lock_guard<std::mutex> 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<std::mutex> 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<std::mutex> lock(mutex); if (midi_in.isPortOpen()) midi_in.closePort(); if (midi_out.isPortOpen()) midi_out.closePort(); } |