[PATCH 03/12] user32/tests: Synchronize with the SendMessageTimeout thread.
Rémi Bernon
rbernon at codeweavers.com
Tue Nov 12 14:41:56 CST 2019
We wait a bit after starting the thread, but sometimes the test fails
because we didn't wait long enough. This synchronizes the Sleep and the
SendMessageTimeout calls.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/user32/tests/msg.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 26d3abee0fa..f136ea11669 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -11355,12 +11355,14 @@ struct sendmsg_info
HWND hwnd;
DWORD timeout;
DWORD ret;
+ HANDLE ready;
};
static DWORD CALLBACK send_msg_thread( LPVOID arg )
{
struct sendmsg_info *info = arg;
SetLastError( 0xdeadbeef );
+ SetEvent( info->ready );
info->ret = SendMessageTimeoutA( info->hwnd, WM_USER, 0, 0, 0, info->timeout, NULL );
if (!info->ret) ok( GetLastError() == ERROR_TIMEOUT ||
broken(GetLastError() == 0), /* win9x */
@@ -11390,6 +11392,7 @@ static void test_SendMessageTimeout(void)
DWORD tid;
BOOL is_win9x;
+ info.ready = CreateEventA( NULL, 0, 0, NULL );
info.hwnd = CreateWindowA( "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW,
100, 100, 200, 200, 0, 0, 0, NULL);
flush_events();
@@ -11397,7 +11400,9 @@ static void test_SendMessageTimeout(void)
info.timeout = 1000;
info.ret = 0xdeadbeef;
+ ResetEvent( info.ready );
thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid );
+ WaitForSingleObject( info.ready, INFINITE );
wait_for_thread( thread );
CloseHandle( thread );
ok( info.ret == 1, "SendMessageTimeout failed\n" );
@@ -11405,7 +11410,9 @@ static void test_SendMessageTimeout(void)
info.timeout = 1;
info.ret = 0xdeadbeef;
+ ResetEvent( info.ready );
thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid );
+ WaitForSingleObject( info.ready, INFINITE );
Sleep(100); /* SendMessageTimeout should time out here */
wait_for_thread( thread );
CloseHandle( thread );
@@ -11415,7 +11422,9 @@ static void test_SendMessageTimeout(void)
/* 0 means infinite timeout (but not on win9x) */
info.timeout = 0;
info.ret = 0xdeadbeef;
+ ResetEvent( info.ready );
thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid );
+ WaitForSingleObject( info.ready, INFINITE );
Sleep(100);
wait_for_thread( thread );
CloseHandle( thread );
@@ -11426,7 +11435,9 @@ static void test_SendMessageTimeout(void)
/* timeout is treated as signed despite the prototype (but not on win9x) */
info.timeout = 0x7fffffff;
info.ret = 0xdeadbeef;
+ ResetEvent( info.ready );
thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid );
+ WaitForSingleObject( info.ready, INFINITE );
Sleep(100);
wait_for_thread( thread );
CloseHandle( thread );
@@ -11435,7 +11446,9 @@ static void test_SendMessageTimeout(void)
info.timeout = 0x80000000;
info.ret = 0xdeadbeef;
+ ResetEvent( info.ready );
thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid );
+ WaitForSingleObject( info.ready, INFINITE );
Sleep(100);
wait_for_thread( thread );
CloseHandle( thread );
@@ -11454,7 +11467,9 @@ static void test_SendMessageTimeout(void)
SetWindowLongPtrA( info.hwnd, GWLP_WNDPROC, (LONG_PTR)send_msg_delay_proc );
info.timeout = 100;
info.ret = 0xdeadbeef;
+ ResetEvent( info.ready );
thread = CreateThread( NULL, 0, send_msg_thread, &info, 0, &tid );
+ WaitForSingleObject( info.ready, INFINITE );
wait_for_thread( thread );
CloseHandle( thread );
/* we should time out but still get the message */
@@ -11462,6 +11477,7 @@ static void test_SendMessageTimeout(void)
ok_sequence( WmUser, "WmUser", FALSE );
DestroyWindow( info.hwnd );
+ CloseHandle( info.ready );
}
--
2.24.0.rc2
More information about the wine-devel
mailing list