entity->dispatch_event(server, event);
}
+int handle_epoll_events(struct logger *server, struct epoll_metadata *metadata, int timeout)
+{
+ ensure_epoll_size(&metadata->events, &metadata->events_size, metadata->cnt);
+
+ int nfds = epoll_wait(metadata->fd, metadata->events, metadata->events_size, timeout);
+ if (nfds < 0)
+ return errno == EINTR ? 0 : -errno;
+
+ for (int i = 0; i < nfds; i++)
+ dispatch_epoll_event(server, metadata->events + i);
+
+ return 0;
+}
+
/**
* @brief Do logging
* @details The main logging loop
if (use_lazy_polling)
usleep(MS_TO_US * server->lazy_polling_sleep);
- ensure_epoll_size(&server->epoll_common.events, &server->epoll_common.events_size, server->epoll_common.cnt);
-
- int nfds = epoll_wait(server->epoll_common.fd, server->epoll_common.events, server->epoll_common.events_size, server->epolltime * !use_lazy_polling);
- if (nfds < 0 && errno == EINTR) // TODO: This is *almost* TEMP_FAILURE_RETRY. Is it equivalent?
- continue;
-
- if (nfds < 0) {
- r = -errno;
+ r = handle_epoll_events(server, &server->epoll_common, server->epolltime * !use_lazy_polling);
+ if (r < 0)
break;
- }
-
- for (int i = 0; i < nfds; i++)
- dispatch_epoll_event(server, server->epoll_common.events + i);
service_all_readers(server);
}