Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
libflux/ev_flux: handle EV_ERROR on io watcher
Problem: ev_flux ignores events on its internal io watcher, so when libev raises EV_ERROR on it because something went wrong internally (like flux-framework#2554), nothing happens. The internal io watcher is only used for its side effect of unblocking the reactor when pollevents edge triggers from "no events" to "some events". The prep/check/idle watchers do the heavy lifting. Add a check for pending EV_ERROR events on the io watcher in the check callback. If found, notify the user via the ev_flux watcher callback. Note: in libev 4.25, a failure of epoll_ctl() would internally call fd_kill(), which would call ev_feed_event() to raise EV_ERROR on the watcher. With this patch, EV_ERROR is caught; however, only after a one minute delay, which has not been explained. libev 4.27 turns that error into an assertion. Since other error paths in libev call fd_kill(), this change may be useful for other as yet unseen problems.
- Loading branch information