From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Tue, 26 Oct 2010 15:11:06 +0000 (+0000)
Subject: Don't dispatch messages while waiting in worker thread in wxMSW.
X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ef0fdf3914bf957feeadbac5a77505fc98d65e9b?ds=sidebyside;hp=bd63e363c263e069521a5629bdff684948469747

Don't dispatch messages while waiting in worker thread in wxMSW.

We only want to continue dispatching messages while waiting for another thread
to terminate if we are waiting in the main thread.

Closes #12618.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65929 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---

diff --git a/src/msw/app.cpp b/src/msw/app.cpp
index 81261ce15f..6f93301d0a 100644
--- a/src/msw/app.cpp
+++ b/src/msw/app.cpp
@@ -235,11 +235,12 @@ bool wxGUIAppTraits::DoMessageFromThreadWait()
 
 DWORD wxGUIAppTraits::WaitForThread(WXHANDLE hThread)
 {
-    // if we don't have a running event loop, we shouldn't wait for the
-    // messages as we never remove them from the message queue and so we enter
-    // an infinite loop as MsgWaitForMultipleObjects() keeps returning
-    // WAIT_OBJECT_0 + 1
-    if ( !wxEventLoop::GetActive() )
+    // We only ever dispatch messages from the main thread and, additionally,
+    // even from the main thread we shouldn't wait for the message if we don't
+    // have a running event loop as we would never remove them from the message
+    // queue then and so we would enter an infinite loop as
+    // MsgWaitForMultipleObjects() keeps returning WAIT_OBJECT_0 + 1.
+    if ( !wxIsMainThread() || !wxEventLoop::GetActive() )
         return DoSimpleWaitForThread(hThread);
 
     return ::MsgWaitForMultipleObjects