From: Václav Slavík Date: Wed, 3 Jan 2007 17:25:47 +0000 (+0000) Subject: fixed deadlock when calling wxPostEvent() from worker thread X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f7a50432401c62a3300b0b9faa7e99d7ffe3d4e8 fixed deadlock when calling wxPostEvent() from worker thread git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@44092 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/dfb/evtloop.cpp b/src/dfb/evtloop.cpp index 2ecc94a9b4..3cc18ac290 100644 --- a/src/dfb/evtloop.cpp +++ b/src/dfb/evtloop.cpp @@ -25,6 +25,7 @@ #include "wx/app.h" #endif +#include "wx/thread.h" #include "wx/timer.h" #include "wx/private/socketevtdispatch.h" #include "wx/dfb/private.h" @@ -88,7 +89,16 @@ bool wxEventLoop::Dispatch() // OnNextIteration() will be called frequently enough const int TIMEOUT = 100; - if ( ms_buffer->WaitForEventWithTimeout(0, TIMEOUT) ) + // release the GUI mutex so that other threads have a chance to post + // events: + wxMutexGuiLeave(); + + bool rv = ms_buffer->WaitForEventWithTimeout(0, TIMEOUT); + + // and acquire it back before calling any event handlers: + wxMutexGuiEnter(); + + if ( rv ) { switch ( ms_buffer->GetLastResult() ) {