From c46194d08b80efd99faf330d15b347718b355f03 Mon Sep 17 00:00:00 2001 From: ed Date: Fri, 6 Dec 2019 16:57:09 +0000 Subject: [PATCH] Windows: Fixed a deadlock that could occur when dispatching messages from the overflow queue --- .../juce_events/native/juce_win32_Messaging.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/modules/juce_events/native/juce_win32_Messaging.cpp b/modules/juce_events/native/juce_win32_Messaging.cpp index 43c9152069..14349090d5 100644 --- a/modules/juce_events/native/juce_win32_Messaging.cpp +++ b/modules/juce_events/native/juce_win32_Messaging.cpp @@ -230,16 +230,23 @@ private: void dispatchOverflowMessages() { - const ScopedLock sl (lock); + ReferenceCountedArray 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(); dispatchMessageFromLParam ((LPARAM) message.get()); } - - overflowQueue.clear(); } //==============================================================================