Skip to content

Commit fba9f76

Browse files
authored
Make messageThreadID atomic (#26)
1 parent 4ef8b0b commit fba9f76

File tree

2 files changed

+6
-9
lines changed

2 files changed

+6
-9
lines changed

modules/juce_events/messages/juce_MessageManager.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -252,18 +252,16 @@ void MessageManager::deregisterBroadcastListener (ActionListener* const listener
252252
//==============================================================================
253253
bool MessageManager::isThisTheMessageThread() const noexcept
254254
{
255-
const std::lock_guard<std::mutex> lock { messageThreadIdMutex };
256-
257-
return Thread::getCurrentThreadId() == messageThreadId;
255+
return Thread::getCurrentThreadId() == messageThreadId.get();
258256
}
259257

260258
void MessageManager::setCurrentThreadAsMessageThread()
261259
{
262260
auto thisThread = Thread::getCurrentThreadId();
263261

264-
const std::lock_guard<std::mutex> lock { messageThreadIdMutex };
262+
messageThreadId.exchange(thisThread);
265263

266-
if (std::exchange (messageThreadId, thisThread) != thisThread)
264+
if (messageThreadId.get() != thisThread)
267265
{
268266
#if JUCE_WINDOWS
269267
// This is needed on windows to make sure the message window is created by this thread
@@ -276,7 +274,7 @@ void MessageManager::setCurrentThreadAsMessageThread()
276274
bool MessageManager::currentThreadHasLockedMessageManager() const noexcept
277275
{
278276
auto thisThread = Thread::getCurrentThreadId();
279-
return thisThread == messageThreadId || thisThread == threadWithLock.get();
277+
return thisThread == messageThreadId.get() || thisThread == threadWithLock.get();
280278
}
281279

282280
bool MessageManager::existsAndIsLockedByCurrentThread() noexcept

modules/juce_events/messages/juce_MessageManager.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class JUCE_API MessageManager final
147147
(Best to ignore this method unless you really know what you're doing..)
148148
@see setCurrentThreadAsMessageThread
149149
*/
150-
Thread::ThreadID getCurrentMessageThread() const noexcept { return messageThreadId; }
150+
Thread::ThreadID getCurrentMessageThread() const noexcept { return messageThreadId.get(); }
151151

152152
/** Returns true if the caller thread has currently got the message manager locked.
153153
@@ -352,9 +352,8 @@ class JUCE_API MessageManager final
352352

353353
std::unique_ptr<ActionBroadcaster> broadcaster;
354354
Atomic<int> quitMessagePosted { 0 }, quitMessageReceived { 0 };
355-
Thread::ThreadID messageThreadId;
355+
Atomic<Thread::ThreadID> messageThreadId;
356356
Atomic<Thread::ThreadID> threadWithLock;
357-
mutable std::mutex messageThreadIdMutex;
358357

359358
static bool postMessageToSystemQueue (MessageBase*);
360359
static void* exitModalLoopCallback (void*);

0 commit comments

Comments
 (0)