[PATCH 3/8] server: Clear FD_OOB instead of FD_READ when receiving OOB data.
Zebediah Figura
z.figura12 at gmail.com
Wed May 26 23:36:49 CDT 2021
Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
dlls/ntdll/unix/socket.c | 1 +
server/protocol.def | 1 +
server/sock.c | 4 ++--
3 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/unix/socket.c b/dlls/ntdll/unix/socket.c
index 0812ec4970f..eb278096b43 100644
--- a/dlls/ntdll/unix/socket.c
+++ b/dlls/ntdll/unix/socket.c
@@ -223,6 +223,7 @@ static NTSTATUS sock_recv( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, voi
req->status = status;
req->total = information;
req->async = server_async( handle, &async->io, event, apc, apc_user, io );
+ req->oob = !!(unix_flags & MSG_OOB);
status = wine_server_call( req );
wait_handle = wine_server_ptr_handle( reply->wait );
options = reply->options;
diff --git a/server/protocol.def b/server/protocol.def
index f0a9107cfbe..88e5ad6a96b 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -1468,6 +1468,7 @@ enum server_fd_type
/* Perform a recv on a socket */
@REQ(recv_socket)
+ int oob; /* are we receiving OOB data? */
async_data_t async; /* async I/O parameters */
unsigned int status; /* status of initial call */
unsigned int total; /* number of bytes already read */
diff --git a/server/sock.c b/server/sock.c
index 549cde17296..04e27328d80 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -2452,8 +2452,8 @@ DECL_HANDLER(recv_socket)
/* are we shut down? */
if (status == STATUS_PENDING && !(sock->state & FD_READ)) status = STATUS_PIPE_DISCONNECTED;
- sock->pending_events &= ~FD_READ;
- sock->reported_events &= ~FD_READ;
+ sock->pending_events &= ~(req->oob ? FD_OOB : FD_READ);
+ sock->reported_events &= ~(req->oob ? FD_OOB : FD_READ);
if ((async = create_request_async( fd, get_fd_comp_flags( fd ), &req->async )))
{
--
2.30.2
More information about the wine-devel
mailing list