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)];
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)
return true;
@ -158,6 +159,8 @@ fdm_poll(struct fdm *fdm)
return false;
}
bool ret = true;
fdm->is_polling = true;
for (int i = 0; i < ret; i++) {
struct fd *fd = events[i].data.ptr;
@ -165,8 +168,8 @@ fdm_poll(struct fdm *fdm)
continue;
if (!fd->handler(fdm, fd->fd, events[i].events, fd->data)) {
fdm->is_polling = false;
return false;
ret = false;
break;
}
}
fdm->is_polling = false;
@ -176,5 +179,5 @@ fdm_poll(struct fdm *fdm)
tll_remove(fdm->deferred_delete, it);
}
return true;
return ret;
}