1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Fixed a potential data race in ChangeBroadcaster

This commit is contained in:
ed 2019-07-17 15:51:34 +01:00
parent 74c3901138
commit 4aad74d842
2 changed files with 6 additions and 1 deletions

View file

@ -39,6 +39,7 @@ void ChangeBroadcaster::addChangeListener (ChangeListener* const listener)
JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED
changeListeners.add (listener);
anyListeners = true;
}
void ChangeBroadcaster::removeChangeListener (ChangeListener* const listener)
@ -48,6 +49,7 @@ void ChangeBroadcaster::removeChangeListener (ChangeListener* const listener)
JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED
changeListeners.remove (listener);
anyListeners = changeListeners.size() > 0;
}
void ChangeBroadcaster::removeAllChangeListeners()
@ -57,11 +59,12 @@ void ChangeBroadcaster::removeAllChangeListeners()
JUCE_ASSERT_MESSAGE_MANAGER_IS_LOCKED
changeListeners.clear();
anyListeners = false;
}
void ChangeBroadcaster::sendChangeMessage()
{
if (changeListeners.size() > 0)
if (anyListeners)
broadcastCallback.triggerAsyncUpdate();
}

View file

@ -95,6 +95,8 @@ private:
ChangeBroadcasterCallback broadcastCallback;
ListenerList <ChangeListener> changeListeners;
std::atomic<bool> anyListeners { false };
void callListeners();
JUCE_DECLARE_NON_COPYABLE (ChangeBroadcaster)