diff --git a/modules/juce_audio_devices/midi_io/juce_MidiDeviceListConnectionBroadcaster.cpp b/modules/juce_audio_devices/midi_io/juce_MidiDeviceListConnectionBroadcaster.cpp index 89e843d765..c80d2168de 100644 --- a/modules/juce_audio_devices/midi_io/juce_MidiDeviceListConnectionBroadcaster.cpp +++ b/modules/juce_audio_devices/midi_io/juce_MidiDeviceListConnectionBroadcaster.cpp @@ -57,20 +57,22 @@ public: void notify() { - if (MessageManager::getInstance()->isThisTheMessageThread()) - { - cancelPendingUpdate(); + auto* mm = MessageManager::getInstanceWithoutCreating(); - const State newState; + if (mm == nullptr) + return; - if (std::exchange (lastNotifiedState, newState) != newState) - for (auto it = callbacks.begin(); it != callbacks.end();) - NullCheckedInvocation::invoke ((it++)->second); - } - else + if (! mm->isThisTheMessageThread()) { triggerAsyncUpdate(); + return; } + + cancelPendingUpdate(); + + if (auto prev = std::exchange (lastNotifiedState, State{}); prev != lastNotifiedState) + for (auto it = callbacks.begin(); it != callbacks.end();) + NullCheckedInvocation::invoke ((it++)->second); } static auto& get() @@ -108,7 +110,7 @@ private: } std::map> callbacks; - State lastNotifiedState; + std::optional lastNotifiedState; MidiDeviceListConnection::Key key = 0; };