Browse Source

Windows: Fixed a deadlock that could occur when dispatching messages from the overflow queue

tags/2021-05-28
ed 5 years ago
parent
commit
c46194d08b
1 changed files with 12 additions and 5 deletions
  1. +12
    -5
      modules/juce_events/native/juce_win32_Messaging.cpp

+ 12
- 5
modules/juce_events/native/juce_win32_Messaging.cpp View File

@@ -230,16 +230,23 @@ private:
void dispatchOverflowMessages() void dispatchOverflowMessages()
{ {
const ScopedLock sl (lock);
ReferenceCountedArray<MessageManager::MessageBase> messagesToDispatch;
for (int i = 0; i < overflowQueue.size(); ++i)
{ {
auto message = overflowQueue.getUnchecked (i);
const ScopedLock sl (lock);
if (overflowQueue.isEmpty())
return;
messagesToDispatch.swapWith (overflowQueue);
}
for (int i = 0; i < messagesToDispatch.size(); ++i)
{
auto message = messagesToDispatch.getUnchecked (i);
message->incReferenceCount(); message->incReferenceCount();
dispatchMessageFromLParam ((LPARAM) message.get()); dispatchMessageFromLParam ((LPARAM) message.get());
} }
overflowQueue.clear();
} }
//============================================================================== //==============================================================================


Loading…
Cancel
Save