From 8f0efbf10ed166b8c97dfc9563f091f167a13aa0 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 27 Aug 2025 14:53:43 -0400 Subject: [PATCH] MT#55283 call del_item callback even on failure Relevant during shutdown. Make sure all late_port_release objects are still appended to the global queue. Change-Id: I8aa6c2a8ddabdf7296a6934e51ce420c5587ac53 (cherry picked from commit 89313ed074bc83b3c60f1f87374c682d08dde812) --- lib/poller.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/poller.c b/lib/poller.c index bb5040a88..effe8d04d 100644 --- a/lib/poller.c +++ b/lib/poller.c @@ -141,23 +141,24 @@ bool poller_add_item(struct poller *p, struct poller_item *i) { bool poller_del_item_callback(struct poller *p, int fd, void (*callback)(void *), void *arg) { struct poller_item_int *it; + bool ret = false; if (!p || fd < 0) - return false; + goto out; { LOCK(&p->lock); if (!p->items) // can happen during shutdown/free only - return false; + goto out; if (fd >= p->items->len) - return false; + goto out; if (!(it = p->items->pdata[fd])) - return false; + goto out; if (epoll_ctl(p->fd, EPOLL_CTL_DEL, fd, NULL)) - return false; + goto out; p->items->pdata[fd] = NULL; /* stealing the ref */ @@ -165,12 +166,15 @@ bool poller_del_item_callback(struct poller *p, int fd, void (*callback)(void *) obj_put(it); + ret = true; + +out: if (callback) callback(arg); else close(fd); - return true; + return ret; } bool poller_del_item(struct poller *p, int fd) { return poller_del_item_callback(p, fd, NULL, NULL);