From ac16633fdcfbd3f00d8bf1601a878819d6c20546 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 30 Dec 2008 12:09:06 +0000 Subject: [PATCH] don't assert if MsgWaitForMultipleObjects() returns WAIT_OBJECT_0 but there are no messages in the queue -- this does happen git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57660 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/evtloop.cpp | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/msw/evtloop.cpp b/src/msw/evtloop.cpp index 7c1ab86c19..0b5530ff70 100644 --- a/src/msw/evtloop.cpp +++ b/src/msw/evtloop.cpp @@ -111,22 +111,33 @@ int wxMSWEventLoopBase::GetNextMessageTimeout(WXMSG *msg, unsigned long timeout) { // we use this function just in order to not block longer than the // given timeout, so we don't pass any handles to it at all - if ( ::MsgWaitForMultipleObjects - ( - 0, NULL, - FALSE, - timeout, - QS_ALLINPUT - ) == WAIT_TIMEOUT ) - { - return -1; - } + DWORD rc = ::MsgWaitForMultipleObjects + ( + 0, NULL, + FALSE, + timeout, + QS_ALLINPUT + ); - if ( !::PeekMessage(msg, 0, 0, 0, PM_REMOVE) ) + switch ( rc ) { - wxFAIL_MSG( _T("PeekMessage() should have succeeded") ); + default: + wxLogDebug("unexpected MsgWaitForMultipleObjects() return " + "value %lu", rc); + // fall through - return -1; + case WAIT_TIMEOUT: + return -1; + + case WAIT_OBJECT_0: + if ( !::PeekMessage(msg, 0, 0, 0, PM_REMOVE) ) + { + // somehow it may happen that MsgWaitForMultipleObjects() + // returns true but there are no messages -- just treat it + // the same as timeout then + return -1; + } + break; } }