Commit aa6b2482 authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

server: Poll for FD_CLOSE even if we cannot receive more data.

parent 7529f46a
...@@ -4455,12 +4455,12 @@ static void test_close_events(struct event_test_ctx *ctx) ...@@ -4455,12 +4455,12 @@ static void test_close_events(struct event_test_ctx *ctx)
check_events(ctx, 0, 0, 0); check_events(ctx, 0, 0, 0);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ); select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
if (ctx->is_message) if (ctx->is_message)
check_events_todo_msg(ctx, FD_CLOSE, 0, 200); check_events(ctx, FD_CLOSE, 0, 200);
check_events(ctx, 0, 0, 0); check_events(ctx, 0, 0, 0);
select_events(ctx, server, 0); select_events(ctx, server, 0);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ); select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
if (ctx->is_message) if (ctx->is_message)
check_events_todo_msg(ctx, FD_CLOSE, 0, 200); check_events(ctx, FD_CLOSE, 0, 200);
check_events(ctx, 0, 0, 0); check_events(ctx, 0, 0, 0);
ret = recv(server, buffer, 5, 0); ret = recv(server, buffer, 5, 0);
...@@ -4553,7 +4553,7 @@ static void test_close_events(struct event_test_ctx *ctx) ...@@ -4553,7 +4553,7 @@ static void test_close_events(struct event_test_ctx *ctx)
check_events(ctx, 0, 0, 200); check_events(ctx, 0, 0, 200);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ); select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
check_events_todo_event(ctx, FD_CLOSE, 0, 200); check_events_todo(ctx, FD_CLOSE, 0, 200);
closesocket(server); closesocket(server);
} }
......
...@@ -786,8 +786,7 @@ static int sock_get_poll_events( struct fd *fd ) ...@@ -786,8 +786,7 @@ static int sock_get_poll_events( struct fd *fd )
else if (smask & FD_READ || (sock->state & FD_WINE_LISTENING && mask & FD_ACCEPT)) else if (smask & FD_READ || (sock->state & FD_WINE_LISTENING && mask & FD_ACCEPT))
ev |= POLLIN | POLLPRI; ev |= POLLIN | POLLPRI;
/* We use POLLIN with 0 bytes recv() as FD_CLOSE indication for stream sockets. */ /* We use POLLIN with 0 bytes recv() as FD_CLOSE indication for stream sockets. */
else if (sock->type == WS_SOCK_STREAM && (sock->state & FD_READ) && (mask & FD_CLOSE) && else if (sock->type == WS_SOCK_STREAM && (mask & FD_CLOSE) && !(sock->reported_events & FD_READ))
!(sock->reported_events & FD_READ))
ev |= POLLIN; ev |= POLLIN;
if (async_queued( &sock->write_q )) if (async_queued( &sock->write_q ))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment