From 7b56f43ded4529f2eda5d58a40639dc8371fc35a Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 27 Mar 2019 15:53:51 +0000 Subject: [PATCH] Fixed a potential data race in the MIDI devices unit tests --- .../midi_io/juce_MidiDevices.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp b/modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp index 562467a391..eb80c4a794 100644 --- a/modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp +++ b/modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp @@ -195,12 +195,15 @@ void MidiOutput::run() { void handleIncomingMidiMessage (MidiInput* source, const MidiMessage& message) override { + const ScopedLock sl (messageLock); + messageSource = source; messageReceived = message; } MidiInput* messageSource = nullptr; MidiMessage messageReceived; + CriticalSection messageLock; }; MessageCallbackHandler handler; @@ -245,11 +248,15 @@ void MidiOutput::run() // Pump the message thread for a bit to allow the message to be delivered MessageManager::getInstance()->runDispatchLoopUntil (100); - expect (handler.messageSource == midiInput.get()); + { + const ScopedLock sl (handler.messageLock); + + expect (handler.messageSource == midiInput.get()); - expect (handler.messageReceived.getChannel() == testMessage.getChannel()); - expect (handler.messageReceived.getNoteNumber() == testMessage.getNoteNumber()); - expect (handler.messageReceived.getVelocity() == testMessage.getVelocity()); + expect (handler.messageReceived.getChannel() == testMessage.getChannel()); + expect (handler.messageReceived.getNoteNumber() == testMessage.getNoteNumber()); + expect (handler.messageReceived.getVelocity() == testMessage.getVelocity()); + } midiInput->stop(); }