From a9f757973894e64ffd81d9baa12a361fa4d4607d Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Mon, 7 Jul 2025 13:39:26 -0400 Subject: [PATCH] LibCore: Awaken read notifiers when we receive POLLHUP events POLLHUP is set when the remote end of the monitored fd is closed. There may still be some buffered data to read from the socket, however. Some systems do not set POLLIN in these cases. So we should just always try to read from fds when we receive this event. --- Libraries/LibCore/EventLoopImplementationUnix.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Libraries/LibCore/EventLoopImplementationUnix.cpp b/Libraries/LibCore/EventLoopImplementationUnix.cpp index d324be9c04b..962b6291ed1 100644 --- a/Libraries/LibCore/EventLoopImplementationUnix.cpp +++ b/Libraries/LibCore/EventLoopImplementationUnix.cpp @@ -420,10 +420,12 @@ try_select_again: if (has_flag(revents, POLLOUT)) type |= NotificationType::Write; if (has_flag(revents, POLLHUP)) - type |= NotificationType::HangUp; + type |= NotificationType::Read | NotificationType::HangUp; if (has_flag(revents, POLLERR)) type |= NotificationType::Error; + type &= notifier.type(); + if (type != NotificationType::None) ThreadEventQueue::current().post_event(notifier, make(notifier.fd(), type)); #endif