sigaction(handled_signals[u], &action, NULL);
}
+static bool do_logger_one_iteration(struct logger *server, bool *use_lazy_polling)
+{
+ if (*use_lazy_polling)
+ sleep_while_handling_socket(server, &server->epoll_socket, g_backend.lazy_polling_sleep);
+
+ if (g_backend.lazy_polling_total > 0) {
+ g_backend.lazy_polling_total -= g_backend.lazy_polling_sleep;
+ *use_lazy_polling = (g_backend.lazy_polling_total > 0);
+ }
+
+ int r = handle_epoll_events(server, &server->epoll_common, server->epolltime * !*use_lazy_polling);
+ if (r < 0)
+ return false;
+
+ service_all_readers(server);
+ qos_periodic_check(server);
+ return true;
+}
+
/**
* @brief Do logging
* @details The main logging loop
{
setup_signals(server);
- /* Note, negative values are applied here, but not in the check below.
- * This leaves lazy polling enabled forever and is a feature. */
+ /* Note, negative values are applied here, but not in the check in
+ * the inner function. This leaves lazy polling enabled forever
+ * and is a feature. */
bool use_lazy_polling = (g_backend.lazy_polling_total != 0);
- while (g_logger_run) {
-
- if (use_lazy_polling)
- sleep_while_handling_socket(server, &server->epoll_socket, g_backend.lazy_polling_sleep);
-
- if (g_backend.lazy_polling_total > 0) {
- g_backend.lazy_polling_total -= g_backend.lazy_polling_sleep;
- use_lazy_polling = (g_backend.lazy_polling_total > 0);
- }
-
- int r = handle_epoll_events(server, &server->epoll_common, server->epolltime * !use_lazy_polling);
- if (r < 0)
+ while (g_logger_run)
+ if (!do_logger_one_iteration(server, &use_lazy_polling))
break;
- service_all_readers(server);
- qos_periodic_check(server);
- }
-
/* ensure all logs are written no matter when the program was interrupted */
server->exiting = 1;
service_all_readers(server);