From 04f194aa8a04926fe7f2e42bbf9ba6c62d49339e Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 1 Aug 2013 00:01:00 +0200 Subject: [PATCH] uloop: fix deleting pending fd events on uloop_fd_del When a fd gets deleted internally due to errors, fd->registered gets set to false before events are moved to the staging array. This leads to pending events not getting cleared properly when the fd user finally calls uloop_fd_del. Fix this by moving the check down and always checking for pending events. Signed-off-by: Felix Fietkau --- uloop.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/uloop.c b/uloop.c index deb08a3..9a0590f 100644 --- a/uloop.c +++ b/uloop.c @@ -392,15 +392,16 @@ int uloop_fd_delete(struct uloop_fd *fd) { int i; - if (!fd->registered) - return 0; - for (i = 0; i < cur_nfds; i++) { if (cur_fds[cur_fd + i].fd != fd) continue; cur_fds[cur_fd + i].fd = NULL; } + + if (!fd->registered) + return 0; + fd->registered = false; uloop_fd_stack_event(fd, -1); return __uloop_fd_delete(fd);