dlog_logger: extract main loop iteration 68/287568/4
authorMichal Bloch <m.bloch@samsung.com>
Tue, 31 Jan 2023 13:10:44 +0000 (14:10 +0100)
committerMichal Bloch <m.bloch@samsung.com>
Thu, 2 Feb 2023 16:48:48 +0000 (17:48 +0100)
Needed to intertwine two server structs in a single loop, which will
be introduced in a further patch. The aim is to encapsulate a reader
in its own server struct to maintain identical behaviour when moved
to a separate thread.

Also makes the code cleaner (small building blocks, etc).

Change-Id: Id60f30df617f30b65a6b121eabfd6ebeed4af6db
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
src/logger/logger.c

index d95bc7c..a67a191 100644 (file)
@@ -914,6 +914,25 @@ void setup_signals(struct logger *server)
                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
@@ -927,27 +946,14 @@ int do_logger(struct logger *server)
 {
        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);