[PATCH 1/4] samples/cgroup: fix poll error handling in memcg_event_listener
From: Song Hu
Date: Mon Nov 02 2026 - 08:04:58 EST
The poll error guard tests "errno != EAGAIN", an error poll() never
reports. The one benign failure the loop does hit is an interrupted
poll (EINTR) when a signal arrives; with this guard the listener
exits via err() instead of resuming.
Continue on EINTR and only bail out on real errors.
Signed-off-by: Song Hu <husong@xxxxxxxxxx>
---
samples/cgroup/memcg_event_listener.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/samples/cgroup/memcg_event_listener.c b/samples/cgroup/memcg_event_listener.c
index 41425edbd88a..ec7c03fa7887 100644
--- a/samples/cgroup/memcg_event_listener.c
+++ b/samples/cgroup/memcg_event_listener.c
@@ -234,8 +234,11 @@ static void monitor_events(struct memcg_events *events)
for (;;) {
ret = poll(fds, ARRAY_SIZE(fds), -1);
- if (ret < 0 && errno != EAGAIN)
- err(EXIT_FAILURE, "Can't poll memcg events (%d)", ret);
+ if (ret < 0) {
+ if (errno == EINTR)
+ continue;
+ err(EXIT_FAILURE, "Can't poll memcg events");
+ }
if (fds[0].revents & POLLERR)
err(EXIT_FAILURE, "Got POLLERR during monitor events");
--
2.53.0