Module: wine Branch: oldstable Commit: 51fb80556e392814f2eebeb3545d27b9edeff6ca URL: https://source.winehq.org/git/wine.git/?a=commit;h=51fb80556e392814f2eebeb35...
Author: Zebediah Figura z.figura12@gmail.com Date: Thu Sep 10 16:17:15 2020 -0500
ws2_32: Close all open sockets in WSACleanup().
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=18670 Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 470b9d037988cf5e79b039370e2c6c55daf3459c) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/ws2_32/socket.c | 14 +++++++++++--- dlls/ws2_32/tests/sock.c | 3 --- 2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 4495d19a802..9dac32bf210 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -1768,9 +1768,17 @@ int WINAPI WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData) */ INT WINAPI WSACleanup(void) { - if (num_startup) { - num_startup--; - TRACE("pending cleanups: %d\n", num_startup); + TRACE("decreasing startup count from %d\n", num_startup); + if (num_startup) + { + if (!--num_startup) + { + unsigned int i; + + for (i = 0; i < socket_list_size; ++i) + CloseHandle(SOCKET2HANDLE(socket_list[i])); + memset(socket_list, 0, socket_list_size * sizeof(*socket_list)); + } return 0; } SetLastError(WSANOTINITIALISED); diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 15954b0fa91..305258deea7 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -1218,7 +1218,6 @@ static void test_WithWSAStartup(void) ok(res == 0, "WSAStartup() failed unexpectedly: %d\n", res);
/* show that sockets are destroyed automatically after WSACleanup */ - todo_wine { SetLastError(0xdeadbeef); res = send(pairs[0].src, "TEST", 4, 0); error = WSAGetLastError(); @@ -1255,8 +1254,6 @@ static void test_WithWSAStartup(void) } }
- } - /* While wine is not fixed, close all sockets manually */ for (i = 0; i < socks; i++) {