Jacek Caban : ws2_32: Use register_async for WS2_async_send.

Alexandre Julliard julliard at winehq.org
Wed Apr 5 16:17:08 CDT 2017


Module: wine
Branch: master
Commit: 35ca862025fa14065d4ebed761783de225cb6690
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=35ca862025fa14065d4ebed761783de225cb6690

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Apr  5 13:38:17 2017 +0200

ws2_32: Use register_async for WS2_async_send.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ws2_32/socket.c | 33 ++++++++-------------------------
 1 file changed, 8 insertions(+), 25 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 2a957ce..22ff479 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -3592,19 +3592,8 @@ static BOOL WINAPI WS2_ConnectEx(SOCKET s, const struct WS_sockaddr* name, int n
             wsa->iovec[0].iov_base = sendBuf;
             wsa->iovec[0].iov_len  = sendBufLen;
 
-            SERVER_START_REQ( register_async )
-            {
-                req->type           = ASYNC_TYPE_WRITE;
-                req->async.handle   = wine_server_obj_handle( wsa->hSocket );
-                req->async.callback = wine_server_client_ptr( WS2_async_send );
-                req->async.iosb     = wine_server_client_ptr( iosb );
-                req->async.arg      = wine_server_client_ptr( wsa );
-                req->async.event    = wine_server_obj_handle( ov->hEvent );
-                req->async.cvalue   = cvalue;
-                status = wine_server_call( req );
-            }
-            SERVER_END_REQ;
-
+            status = register_async( ASYNC_TYPE_WRITE, wsa->hSocket, WS2_async_send, wsa, ov->hEvent,
+                                      NULL, (void *)cvalue, iosb );
             if (status != STATUS_PENDING) HeapFree(GetProcessHeap(), 0, wsa);
 
             /* If the connect already failed */
@@ -5609,18 +5598,12 @@ static int WS2_sendto( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount,
             iosb->u.Status = STATUS_PENDING;
             iosb->Information = n == -1 ? 0 : n;
 
-            SERVER_START_REQ( register_async )
-            {
-                req->type           = ASYNC_TYPE_WRITE;
-                req->async.handle   = wine_server_obj_handle( wsa->hSocket );
-                req->async.callback = wine_server_client_ptr( WS2_async_send );
-                req->async.iosb     = wine_server_client_ptr( iosb );
-                req->async.arg      = wine_server_client_ptr( wsa );
-                req->async.event    = wine_server_obj_handle( lpCompletionRoutine ? 0 : lpOverlapped->hEvent );
-                req->async.cvalue   = cvalue;
-                err = wine_server_call( req );
-            }
-            SERVER_END_REQ;
+            if (wsa->completion_func)
+                err = register_async( ASYNC_TYPE_WRITE, wsa->hSocket, WS2_async_send, wsa, NULL,
+                                         ws2_async_apc, wsa, iosb );
+            else
+                err = register_async( ASYNC_TYPE_WRITE, wsa->hSocket, WS2_async_send, wsa, lpOverlapped->hEvent,
+                                      NULL, (void *)cvalue, iosb );
 
             /* Enable the event only after starting the async. The server will deliver it as soon as
                the async is done. */




More information about the wine-cvs mailing list