From: Felix Fietkau Date: Wed, 31 Jul 2013 22:01:00 +0000 (+0200) Subject: uloop: fix deleting pending fd events on uloop_fd_del X-Git-Url: http://git.archive.openwrt.org/?a=commitdiff_plain;h=04f194aa8a04926fe7f2e42bbf9ba6c62d49339e;hp=ef9b6b92df223e783a365f34998bc0f299b977f2;p=project%2Flibubox.git 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 --- 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);