Commit 4c409f8a authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

server: Post socket events only if selecting for them.

parent 53210ceb
......@@ -4391,35 +4391,35 @@ static void test_oob_events(struct event_test_ctx *ctx)
ret = send(client, "a", 1, MSG_OOB);
ok(ret == 1, "got %d\n", ret);
check_events_todo_msg(ctx, FD_OOB, 0, 200);
check_events_todo(ctx, 0, 0, 0);
check_events(ctx, FD_OOB, 0, 200);
check_events(ctx, 0, 0, 0);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
if (ctx->is_message)
check_events_todo_msg(ctx, FD_OOB, 0, 200);
check_events_todo(ctx, 0, 0, 0);
check_events(ctx, FD_OOB, 0, 200);
check_events(ctx, 0, 0, 0);
select_events(ctx, server, 0);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
if (ctx->is_message)
check_events_todo_msg(ctx, FD_OOB, 0, 200);
check_events_todo(ctx, 0, 0, 0);
check_events(ctx, FD_OOB, 0, 200);
check_events(ctx, 0, 0, 0);
ret = send(client, "b", 1, MSG_OOB);
ok(ret == 1, "got %d\n", ret);
if (!ctx->is_message)
check_events(ctx, FD_OOB, 0, 200);
check_events_todo(ctx, 0, 0, 0);
check_events_todo_event(ctx, FD_OOB, 0, 200);
check_events(ctx, 0, 0, 0);
ret = recv(server, buffer, 1, MSG_OOB);
ok(ret == 1, "got %d\n", ret);
check_events_todo(ctx, FD_OOB, 0, 200);
check_events_todo_msg(ctx, 0, 0, 0);
check_events(ctx, 0, 0, 0);
ret = recv(server, buffer, 1, MSG_OOB);
todo_wine ok(ret == 1, "got %d\n", ret);
check_events_todo_msg(ctx, 0, 0, 0);
check_events(ctx, 0, 0, 0);
/* Send data while we're not selecting. */
......@@ -4428,7 +4428,7 @@ static void test_oob_events(struct event_test_ctx *ctx)
ok(ret == 1, "got %d\n", ret);
select_events(ctx, server, FD_ACCEPT | FD_CLOSE | FD_CONNECT | FD_OOB | FD_READ);
check_events_todo_msg(ctx, FD_OOB, 0, 200);
check_events(ctx, FD_OOB, 0, 200);
ret = recv(server, buffer, 1, MSG_OOB);
ok(ret == 1, "got %d\n", ret);
......
......@@ -627,9 +627,12 @@ static void post_socket_event( struct sock *sock, unsigned int event_bit, unsign
{
unsigned int event = (1 << event_bit);
sock->pending_events |= event;
sock->reported_events |= event;
sock->errors[event_bit] = error;
if (!(sock->reported_events & event))
{
sock->pending_events |= event;
sock->reported_events |= event;
sock->errors[event_bit] = error;
}
}
static void sock_dispatch_events( struct sock *sock, int prevstate, int event, int error )
......
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