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:
parent
74c3901138
commit
4aad74d842
2 changed files with 6 additions and 1 deletions
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -95,6 +95,8 @@ private:
|
|||
ChangeBroadcasterCallback broadcastCallback;
|
||||
ListenerList <ChangeListener> changeListeners;
|
||||
|
||||
std::atomic<bool> anyListeners { false };
|
||||
|
||||
void callListeners();
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE (ChangeBroadcaster)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue