Zebediah Figura : ole32/tests: Test CoWaitForMultipleHandles() in an uninitialized or MTA apartment.
Module: wine Branch: master Commit: 084559fe853bcbe1ea1315ce2049618de0366233 URL: https://source.winehq.org/git/wine.git/?a=commit;h=084559fe853bcbe1ea1315ce2... Author: Zebediah Figura <z.figura12(a)gmail.com> Date: Mon Apr 9 21:15:50 2018 -0500 ole32/tests: Test CoWaitForMultipleHandles() in an uninitialized or MTA apartment. Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com> Signed-off-by: Huw Davies <huw(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/ole32/tests/compobj.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/dlls/ole32/tests/compobj.c b/dlls/ole32/tests/compobj.c index b9b7be0..c43e86c 100644 --- a/dlls/ole32/tests/compobj.c +++ b/dlls/ole32/tests/compobj.c @@ -2998,14 +2998,36 @@ static void test_CoWaitForMultipleHandles(void) ok(index == WAIT_OBJECT_0, "WaitForSingleObject failed\n"); CloseHandle(thread); + CoUninitialize(); + + /* If COM was not initialized, messages are neither pumped nor peeked at */ + PostMessageA(hWnd, WM_DDE_FIRST, 0, 0); + hr = CoWaitForMultipleHandles(0, 100, 2, handles, &index); + ok(hr == RPC_S_CALLPENDING, "got %#x\n", hr); + success = MsgWaitForMultipleObjectsEx(0, NULL, 2, QS_ALLPOSTMESSAGE, MWMO_ALERTABLE); + ok(success == 0, "MsgWaitForMultipleObjects returned %x\n", success); + success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE); + ok(success, "PeekMessage failed: %u\n", GetLastError()); + + /* same in an MTA */ + CoInitializeEx(NULL, COINIT_MULTITHREADED); + + PostMessageA(hWnd, WM_DDE_FIRST, 0, 0); + hr = CoWaitForMultipleHandles(0, 100, 2, handles, &index); + ok(hr == RPC_S_CALLPENDING, "got %#x\n", hr); + success = MsgWaitForMultipleObjectsEx(0, NULL, 2, QS_ALLPOSTMESSAGE, MWMO_ALERTABLE); + ok(success == 0, "MsgWaitForMultipleObjects returned %x\n", success); + success = PeekMessageA(&msg, hWnd, WM_DDE_FIRST, WM_DDE_FIRST, PM_REMOVE); + ok(success, "PeekMessage failed: %u\n", GetLastError()); + + CoUninitialize(); + CloseHandle(handles[0]); CloseHandle(handles[1]); DestroyWindow(hWnd); success = UnregisterClassA(cls_name, GetModuleHandleA(0)); ok(success, "UnregisterClass failed %u\n", GetLastError()); - - CoUninitialize(); } static void test_CoGetMalloc(void)
participants (1)
-
Alexandre Julliard