From bff228c198597f4a1c43432988a2d61f93df5bc9 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Thu, 5 May 2022 00:43:29 -0500 Subject: [PATCH] server: Do not signal write bits if there are write asyncs alerted. Asyncs which are alerted but not "waiting" may still fill the pipe, and we shouldn't signal AFD_POLL_WRITE in that case. Signed-off-by: Zebediah Figura Signed-off-by: Alexandre Julliard --- server/sock.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/server/sock.c b/server/sock.c index cb76765e495..aa62a03d699 100644 --- a/server/sock.c +++ b/server/sock.c @@ -1011,10 +1011,13 @@ static int sock_dispatch_asyncs( struct sock *sock, int event, int error ) event &= ~(POLLIN | POLLPRI); } - if (event & POLLOUT && async_waiting( &sock->write_q )) + if ((event & POLLOUT) && async_queued( &sock->write_q )) { - if (debug_level) fprintf( stderr, "activating write queue for socket %p\n", sock ); - async_wake_up( &sock->write_q, STATUS_ALERTED ); + if (async_waiting( &sock->write_q )) + { + if (debug_level) fprintf( stderr, "activating write queue for socket %p\n", sock ); + async_wake_up( &sock->write_q, STATUS_ALERTED ); + } event &= ~POLLOUT; }