Browse Source

MessageManager: Add mutex to isThisTheMessageThread() and setCurrentThreadAsMessageThread()

v7.0.9
attila Attila Szarvas 3 years ago
parent
commit
d246cc280d
2 changed files with 6 additions and 3 deletions
  1. +5
    -3
      modules/juce_events/messages/juce_MessageManager.cpp
  2. +1
    -0
      modules/juce_events/messages/juce_MessageManager.h

+ 5
- 3
modules/juce_events/messages/juce_MessageManager.cpp View File

@@ -225,6 +225,8 @@ void MessageManager::deregisterBroadcastListener (ActionListener* const listener
//==============================================================================
bool MessageManager::isThisTheMessageThread() const noexcept
{
const std::lock_guard<std::mutex> lock { messageThreadIdMutex };
return Thread::getCurrentThreadId() == messageThreadId;
}
@@ -232,10 +234,10 @@ void MessageManager::setCurrentThreadAsMessageThread()
{
auto thisThread = Thread::getCurrentThreadId();
if (messageThreadId != thisThread)
{
messageThreadId = thisThread;
const std::lock_guard<std::mutex> lock { messageThreadIdMutex };
if (std::exchange (messageThreadId, thisThread) != thisThread)
{
#if JUCE_WINDOWS
// This is needed on windows to make sure the message window is created by this thread
doPlatformSpecificShutdown();


+ 1
- 0
modules/juce_events/messages/juce_MessageManager.h View File

@@ -328,6 +328,7 @@ private:
Atomic<int> quitMessagePosted { 0 }, quitMessageReceived { 0 };
Thread::ThreadID messageThreadId;
Atomic<Thread::ThreadID> threadWithLock;
mutable std::mutex messageThreadIdMutex;
static bool postMessageToSystemQueue (MessageBase*);
static void* exitModalLoopCallback (void*);


Loading…
Cancel
Save