diff options
Diffstat (limited to 'daemon')
-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(); } |