[PATCH 2/9] winhttp: Set socket state to shutdown right away in WinHttpWebSocketShutdown().

Paul Gofman pgofman at codeweavers.com
Mon Jan 24 18:07:57 CST 2022


Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
---
 dlls/winhttp/request.c            | 11 +++--------
 dlls/winhttp/tests/notification.c |  5 +++++
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index fc2c06bd11f..d9c5174f152 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -3652,14 +3652,7 @@ DWORD WINAPI WinHttpWebSocketReceive( HINTERNET hsocket, void *buf, DWORD len, D
 
 static DWORD socket_shutdown( struct socket *socket, USHORT status, const void *reason, DWORD len )
 {
-    DWORD ret;
-
-    stop_queue( &socket->send_q );
-    if (!(ret = send_frame( socket, SOCKET_OPCODE_CLOSE, status, reason, len, TRUE, NULL )))
-    {
-        socket->state = SOCKET_STATE_SHUTDOWN;
-    }
-    return ret;
+    return send_frame( socket, SOCKET_OPCODE_CLOSE, status, reason, len, TRUE, NULL );
 }
 
 static void CALLBACK task_socket_shutdown( TP_CALLBACK_INSTANCE *instance, void *ctx, TP_WORK *work )
@@ -3707,6 +3700,8 @@ DWORD WINAPI WinHttpWebSocketShutdown( HINTERNET hsocket, USHORT status, void *r
         return ERROR_INVALID_OPERATION;
     }
 
+    socket->state = SOCKET_STATE_SHUTDOWN;
+
     if (socket->request->connect->hdr.flags & WINHTTP_FLAG_ASYNC)
     {
         struct socket_shutdown *s;
diff --git a/dlls/winhttp/tests/notification.c b/dlls/winhttp/tests/notification.c
index 0c3ff98c342..4127f9933bb 100644
--- a/dlls/winhttp/tests/notification.c
+++ b/dlls/winhttp/tests/notification.c
@@ -814,6 +814,11 @@ static void test_websocket(BOOL secure)
     setup_test( &info, winhttp_websocket_shutdown, __LINE__ );
     err = pWinHttpWebSocketShutdown( socket, 1000, (void *)"success", sizeof("success") );
     ok( err == ERROR_SUCCESS, "got %u\n", err );
+
+    err = pWinHttpWebSocketSend( socket, WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE,
+                                 (void*)"hello", sizeof("hello") );
+    ok( err == ERROR_INVALID_OPERATION, "got %u\n", err );
+
     WaitForSingleObject( info.wait, INFINITE );
 
     err = pWinHttpWebSocketShutdown( socket, 1000, (void *)"success", sizeof("success") );
-- 
2.34.1




More information about the wine-devel mailing list