logger: extract epoll handling function 51/233851/2
authorMichal Bloch <m.bloch@samsung.com>
Thu, 7 May 2020 19:03:08 +0000 (21:03 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Tue, 26 May 2020 12:15:45 +0000 (14:15 +0200)
Change-Id: I67e37cdceeab3a65643c6f8fc5872fef25fea35a
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
src/logger/logger.c

index f220274..d68bd5d 100644 (file)
@@ -1927,6 +1927,20 @@ void dispatch_epoll_event(struct logger *server, struct epoll_event *event)
        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
@@ -1960,19 +1974,9 @@ static int do_logger(struct logger* server)
                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);
        }