From fe9d1f5ae33a197e4535e684d9c42e479c64e207 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 19 Jul 2023 10:11:24 -0400 Subject: [PATCH] MT#56374 avoid aborting in poller Either return error or ignore unhandled conditions. Change-Id: I36883bd8323e89399ef139cd54fef494bb411a28 --- lib/poller.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/poller.c b/lib/poller.c index 2ce837fc0..757a96607 100644 --- a/lib/poller.c +++ b/lib/poller.c @@ -60,7 +60,8 @@ static void poller_map_add(struct poller_map *map) { LOCK(&map->lock); p = poller_new(); - g_hash_table_insert(map->table, (gpointer)tid, p); + if (p) + g_hash_table_insert(map->table, (gpointer)tid, p); } struct poller *poller_map_get(struct poller_map *map) { @@ -99,13 +100,16 @@ struct poller *poller_new(void) { struct poller *p; p = g_slice_alloc0(sizeof(*p)); - gettimeofday(&rtpe_now, NULL); + mutex_init(&p->lock); p->fd = epoll_create1(0); if (p->fd == -1) - abort(); - mutex_init(&p->lock); + goto err; return p; + +err: + poller_free(&p); + return NULL; } void poller_free(struct poller **pp) { @@ -169,7 +173,7 @@ int poller_add_item(struct poller *p, struct poller_item *i) { e.events = epoll_events(i, NULL); e.data.fd = i->fd; if (epoll_ctl(p->fd, EPOLL_CTL_ADD, i->fd, &e)) - abort(); + return -1; if (i->fd >= p->items_size) { u = p->items_size; @@ -207,7 +211,7 @@ int poller_del_item(struct poller *p, int fd) { return -1; if (epoll_ctl(p->fd, EPOLL_CTL_DEL, fd, NULL)) - abort(); + return -1; p->items[fd] = NULL; /* stealing the ref */ @@ -282,7 +286,7 @@ static int poller_poll(struct poller *p, int timeout) { else if (!ev->events) goto next; else - abort(); + goto next; next: obj_put(it);