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 f75a8b3555
)
Signed-off-by: Michael Stefaniuc <mstefani@winehq.org>
This commit is contained in:
parent
88c2d88df0
commit
7bd2197b60
1 changed files with 6 additions and 2 deletions
|
@ -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 );
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue