wineserver: Avoid spurious FD_WRITE on repeated calls to WSAEventSelect().
Repeated calls to WSAEventSelect() with FD_WRITE deliver spurious FD_WRITE events, as the flag isn't held, resulting in us unnecessarily polling the socket for writability, despite the fact FD_WRITE should only be delivered (1) initially on socket creation, and (2) after send[to]() fails with EWOULDBLOCK and buffer space becomes available. Signed-off-by: Damjan Jovanovic <damjan.jov@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a6734f549f
commit
b4a1d80ae3
|
@ -3053,9 +3053,8 @@ static void test_WSAEnumNetworkEvents(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
todo_wine_if (i != 0) /* Remove when fixed */
|
ok (net_events.lNetworkEvents == 0, "Test[%d]: expected 0, got %d\n",
|
||||||
ok (net_events.lNetworkEvents == 0, "Test[%d]: expected 0, got %d\n",
|
i, net_events.lNetworkEvents);
|
||||||
i, net_events.lNetworkEvents);
|
|
||||||
}
|
}
|
||||||
for (k = 0; k < FD_MAX_EVENTS; k++)
|
for (k = 0; k < FD_MAX_EVENTS; k++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1228,7 +1228,7 @@ DECL_HANDLER(set_socket_event)
|
||||||
FILE_WRITE_ATTRIBUTES, &sock_ops))) return;
|
FILE_WRITE_ATTRIBUTES, &sock_ops))) return;
|
||||||
old_event = sock->event;
|
old_event = sock->event;
|
||||||
sock->mask = req->mask;
|
sock->mask = req->mask;
|
||||||
sock->hmask &= ~req->mask; /* re-enable held events */
|
sock->hmask &= (FD_WRITE | ~req->mask); /* re-enable held events */
|
||||||
sock->event = NULL;
|
sock->event = NULL;
|
||||||
sock->window = req->window;
|
sock->window = req->window;
|
||||||
sock->message = req->msg;
|
sock->message = req->msg;
|
||||||
|
|
Loading…
Reference in New Issue