fdm: purge deferred delete list also when handler fails

This commit is contained in:
Daniel Eklöf 2019-11-02 23:35:42 +01:00
parent 1543c71f78
commit ba7f79af18
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

13
fdm.c
View file

@ -149,8 +149,9 @@ fdm_poll(struct fdm *fdm)
} }
struct epoll_event events[tll_length(fdm->fds)]; struct epoll_event events[tll_length(fdm->fds)];
int ret = epoll_wait(fdm->epoll_fd, events, tll_length(fdm->fds), -1);
if (ret == -1) { int r = epoll_wait(fdm->epoll_fd, events, tll_length(fdm->fds), -1);
if (r == -1) {
if (errno == EINTR) if (errno == EINTR)
return true; return true;
@ -158,6 +159,8 @@ fdm_poll(struct fdm *fdm)
return false; return false;
} }
bool ret = true;
fdm->is_polling = true; fdm->is_polling = true;
for (int i = 0; i < ret; i++) { for (int i = 0; i < ret; i++) {
struct fd *fd = events[i].data.ptr; struct fd *fd = events[i].data.ptr;
@ -165,8 +168,8 @@ fdm_poll(struct fdm *fdm)
continue; continue;
if (!fd->handler(fdm, fd->fd, events[i].events, fd->data)) { if (!fd->handler(fdm, fd->fd, events[i].events, fd->data)) {
fdm->is_polling = false; ret = false;
return false; break;
} }
} }
fdm->is_polling = false; fdm->is_polling = false;
@ -176,5 +179,5 @@ fdm_poll(struct fdm *fdm)
tll_remove(fdm->deferred_delete, it); tll_remove(fdm->deferred_delete, it);
} }
return true; return ret;
} }