Module: wine Branch: oldstable Commit: 7bd2197b60cc91666e161220e8e8a765bb8292d0 URL: https://gitlab.winehq.org/wine/wine/-/commit/7bd2197b60cc91666e161220e8e8a76...
Author: Paul Gofman pgofman@codeweavers.com Date: Thu Nov 17 14:58:38 2022 -0600
winhttp/tests: Avoid race condition on closing connection in server_thread().
The connection may be cached and checked for availability for request before the server thread closes it.
(cherry picked from commit f75a8b3555a8db6276a2edea587d1a1a043b36df) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/winhttp/tests/notification.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/winhttp/tests/notification.c b/dlls/winhttp/tests/notification.c index 72cef89a618..f28ea1d1d5a 100644 --- a/dlls/winhttp/tests/notification.c +++ b/dlls/winhttp/tests/notification.c @@ -858,7 +858,7 @@ struct server_info };
static int server_socket; -static HANDLE server_socket_available, server_socket_done; +static HANDLE server_socket_available, server_socket_closed, server_socket_done;
static DWORD CALLBACK server_thread(LPVOID param) { @@ -893,7 +893,7 @@ static DWORD CALLBACK server_thread(LPVOID param) do { if (c == -1) c = accept(s, NULL, NULL); - + ResetEvent(server_socket_closed); memset(buffer, 0, sizeof buffer); for(i = 0; i < sizeof buffer - 1; i++) { @@ -920,6 +920,7 @@ static DWORD CALLBACK server_thread(LPVOID param) } shutdown(c, 2); closesocket(c); + SetEvent(server_socket_closed); c = -1; } while (!last_request);
@@ -1206,6 +1207,7 @@ static void test_persistent_connection(int port)
SetEvent( server_socket_done ); CloseHandle( info.wait ); + WaitForSingleObject( server_socket_closed, INFINITE ); }
struct test_recursion_context @@ -1390,6 +1392,7 @@ START_TEST (notification) ok(thread != NULL, "failed to create thread %u\n", GetLastError());
server_socket_available = CreateEventW( NULL, 0, 0, NULL ); + server_socket_closed = CreateEventW( NULL, 0, 0, NULL ); server_socket_done = CreateEventW( NULL, 0, 0, NULL );
ret = WaitForSingleObject( si.event, 10000 ); @@ -1409,4 +1412,5 @@ START_TEST (notification) CloseHandle( thread ); CloseHandle( server_socket_available ); CloseHandle( server_socket_done ); + CloseHandle( server_socket_closed ); }