ole32: Don't process window events when APC calls are queued.
This commit is contained in:
parent
bbf6891030
commit
f6f55058e4
|
@ -4427,6 +4427,7 @@ HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags, DWORD dwTimeout,
|
||||||
DWORD start_time = GetTickCount();
|
DWORD start_time = GetTickCount();
|
||||||
APARTMENT *apt = COM_CurrentApt();
|
APARTMENT *apt = COM_CurrentApt();
|
||||||
BOOL message_loop = apt && !apt->multi_threaded;
|
BOOL message_loop = apt && !apt->multi_threaded;
|
||||||
|
BOOL check_apc = (dwFlags & COWAIT_ALERTABLE) != 0;
|
||||||
|
|
||||||
TRACE("(0x%08x, 0x%08x, %d, %p, %p)\n", dwFlags, dwTimeout, cHandles,
|
TRACE("(0x%08x, 0x%08x, %d, %p, %p)\n", dwFlags, dwTimeout, cHandles,
|
||||||
pHandles, lpdwindex);
|
pHandles, lpdwindex);
|
||||||
|
@ -4460,9 +4461,19 @@ HRESULT WINAPI CoWaitForMultipleHandles(DWORD dwFlags, DWORD dwTimeout,
|
||||||
|
|
||||||
TRACE("waiting for rpc completion or window message\n");
|
TRACE("waiting for rpc completion or window message\n");
|
||||||
|
|
||||||
res = MsgWaitForMultipleObjectsEx(cHandles, pHandles,
|
res = WAIT_TIMEOUT;
|
||||||
(dwTimeout == INFINITE) ? INFINITE : start_time + dwTimeout - now,
|
|
||||||
QS_SENDMESSAGE | QS_ALLPOSTMESSAGE | QS_PAINT, wait_flags);
|
if (check_apc)
|
||||||
|
{
|
||||||
|
res = WaitForMultipleObjectsEx(cHandles, pHandles,
|
||||||
|
(dwFlags & COWAIT_WAITALL) != 0, 0, TRUE);
|
||||||
|
check_apc = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res == WAIT_TIMEOUT)
|
||||||
|
res = MsgWaitForMultipleObjectsEx(cHandles, pHandles,
|
||||||
|
(dwTimeout == INFINITE) ? INFINITE : start_time + dwTimeout - now,
|
||||||
|
QS_SENDMESSAGE | QS_ALLPOSTMESSAGE | QS_PAINT, wait_flags);
|
||||||
|
|
||||||
if (res == WAIT_OBJECT_0 + cHandles) /* messages available */
|
if (res == WAIT_OBJECT_0 + cHandles) /* messages available */
|
||||||
{
|
{
|
||||||
|
|
|
@ -2241,7 +2241,6 @@ static void test_CoWaitForMultipleHandles(void)
|
||||||
ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr);
|
ok(hr == S_OK, "expected S_OK, got 0x%08x\n", hr);
|
||||||
ok(index == WAIT_IO_COMPLETION, "expected index WAIT_IO_COMPLETION, got %u\n", index);
|
ok(index == WAIT_IO_COMPLETION, "expected index WAIT_IO_COMPLETION, got %u\n", index);
|
||||||
success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
|
success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE);
|
||||||
todo_wine
|
|
||||||
ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
|
ok(success, "CoWaitForMultipleHandles unexpectedly pumped messages\n");
|
||||||
|
|
||||||
/* test with COWAIT_INPUTAVAILABLE (semaphores are still locked) */
|
/* test with COWAIT_INPUTAVAILABLE (semaphores are still locked) */
|
||||||
|
|
Loading…
Reference in New Issue