if (!u)
continue;
- if(events[n].events & EPOLLERR) {
+ if(events[n].events & (EPOLLERR|EPOLLHUP)) {
u->error = true;
uloop_fd_delete(u);
}
- if(!(events[n].events & (EPOLLRDHUP|EPOLLIN|EPOLLOUT|EPOLLERR)))
+ if(!(events[n].events & (EPOLLRDHUP|EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP)))
continue;
if(events[n].events & EPOLLRDHUP)
}
}
+static void uloop_clear_timeouts(void)
+{
+ struct uloop_timeout *t, *tmp;
+
+ list_for_each_entry_safe(t, tmp, &timeouts, list)
+ uloop_timeout_cancel(t);
+}
+
+static void uloop_clear_processes(void)
+{
+ struct uloop_process *p, *tmp;
+
+ list_for_each_entry_safe(p, tmp, &processes, list)
+ uloop_process_delete(p);
+}
+
void uloop_run(void)
{
struct timeval tv;
close(poll_fd);
poll_fd = -1;
+
+ uloop_clear_timeouts();
+ uloop_clear_processes();
}