logger: fd entity manipulators work on epoll metadata 55/233855/2
authorMichal Bloch <m.bloch@samsung.com>
Fri, 8 May 2020 16:10:05 +0000 (18:10 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Tue, 26 May 2020 12:15:45 +0000 (14:15 +0200)
Change-Id: I26dab246c071bae6a6004ddc8516bf4e342f2ba2
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
src/logger/logger.c

index bd9b80e..c5855f3 100644 (file)
@@ -232,16 +232,16 @@ failure:
  * @param[in] fd_entity file descriptor entity
  * @return 0 on success, -errno on failure
  */
-int add_fd_entity(struct logger *logger, struct fd_entity *fd_entity)
+int add_fd_entity(struct epoll_metadata *metadata, struct fd_entity *fd_entity)
 {
-       assert(logger);
+       assert(metadata);
        assert(fd_entity);
 
-       int r = epoll_ctl(logger->epoll_common.fd, EPOLL_CTL_ADD, fd_entity->fd, &fd_entity->event);
+       int r = epoll_ctl(metadata->fd, EPOLL_CTL_ADD, fd_entity->fd, &fd_entity->event);
        if (r < 0)
                return -errno;
 
-       ++logger->epoll_common.cnt;
+       ++metadata->cnt;
        return 0;
 }
 
@@ -253,9 +253,9 @@ int add_fd_entity(struct logger *logger, struct fd_entity *fd_entity)
  * @param[in] wanted_mask wanted event mask
  * @return 0 on success, -errno on failure
  */
-int modify_fd_entity(const struct logger *logger, struct fd_entity *fd_entity, int wanted_mask)
+int modify_fd_entity(const struct epoll_metadata *metadata, struct fd_entity *fd_entity, int wanted_mask)
 {
-       assert(logger);
+       assert(metadata);
        assert(fd_entity);
 
        if (fd_entity->fd < 0)
@@ -266,7 +266,7 @@ int modify_fd_entity(const struct logger *logger, struct fd_entity *fd_entity, i
                return 0;
        fd_entity->event.events = wanted_mask;
 
-       if (epoll_ctl(logger->epoll_common.fd, EPOLL_CTL_MOD, fd_entity->fd, &fd_entity->event) < 0) {
+       if (epoll_ctl(metadata->fd, EPOLL_CTL_MOD, fd_entity->fd, &fd_entity->event) < 0) {
                fd_entity->event.events = pre;
                return -errno;
        }
@@ -280,17 +280,17 @@ int modify_fd_entity(const struct logger *logger, struct fd_entity *fd_entity, i
  * @param[in] fd_entity file descriptor entity
  * @return 0 on success, else -errno
  */
-int remove_fd_entity(struct logger *logger, struct fd_entity *fd_entity)
+int remove_fd_entity(struct epoll_metadata *metadata, struct fd_entity *fd_entity)
 {
-       assert(logger);
-       assert(logger->epoll_common.cnt > 0);
+       assert(metadata);
+       assert(metadata->cnt > 0);
        assert(fd_entity);
 
-       int r = epoll_ctl(logger->epoll_common.fd, EPOLL_CTL_DEL, fd_entity->fd, NULL);
+       int r = epoll_ctl(metadata->fd, EPOLL_CTL_DEL, fd_entity->fd, NULL);
        if (r < 0)
                return -errno;
 
-       --logger->epoll_common.cnt;
+       --metadata->cnt;
        return 0;
 }
 
@@ -544,9 +544,9 @@ static bool cond_reader_free(void *ptr, void *user_data)
        struct logger *logger = (struct logger *)user_data;
        assert(reader);
        if (reader->fd_entity_sink.fd >= 0)
-               remove_fd_entity(logger, &reader->fd_entity_sink);
+               remove_fd_entity(&logger->epoll_common, &reader->fd_entity_sink);
        if (reader->fd_entity_source.fd >= 0)
-               remove_fd_entity(logger, &reader->fd_entity_source);
+               remove_fd_entity(&logger->epoll_common, &reader->fd_entity_source);
        reader_free(reader);
        return true;
 }
@@ -757,7 +757,7 @@ int print_out_logs(struct reader *reader)
 void writer_close_fd(struct logger* server, struct writer* wr)
 {
        assert(wr);
-       remove_fd_entity(server, &wr->fd_entity);
+       remove_fd_entity(&server->epoll_common, &wr->fd_entity);
        close(wr->fd_entity.fd);
 }
 
@@ -896,7 +896,7 @@ static int add_reader(struct logger *server, struct reader *reader)
                 * buffers - is not a problem here because the daemon is not
                 * supposed to ever stop writing to files. */
 
-               int r = add_fd_entity(server, &reader->fd_entity_sink);
+               int r = add_fd_entity(&server->epoll_common, &reader->fd_entity_sink);
                if (r < 0)
                        return r;
        }
@@ -910,12 +910,12 @@ static int add_reader(struct logger *server, struct reader *reader)
        }
 
        assert(reader->fd_entity_source.fd >= 0);
-       ret = add_fd_entity(server, &reader->fd_entity_source);
+       ret = add_fd_entity(&server->epoll_common, &reader->fd_entity_source);
        if (ret < 0)
                goto failure;
 
        if (!list_add(&server->extra_readers, reader)) {
-               remove_fd_entity(server, &reader->fd_entity_source);
+               remove_fd_entity(&server->epoll_common, &reader->fd_entity_source);
                ret = -ENOMEM;
                goto failure;
        }
@@ -924,7 +924,7 @@ static int add_reader(struct logger *server, struct reader *reader)
 
 failure:
        if (reader->fd_entity_sink.fd >= 0)
-               remove_fd_entity(server, &reader->fd_entity_sink);
+               remove_fd_entity(&server->epoll_common, &reader->fd_entity_sink);
 
        return ret;
 }
@@ -973,7 +973,7 @@ int reader_init_for_logger(struct reader *reader, const char *buf_name, struct l
                return -ENOENT;
 
        set_read_fd_entity(&reader->fd_entity_source, read_fd);
-       ret = add_fd_entity(server, &reader->fd_entity_source);
+       ret = add_fd_entity(&server->epoll_common, &reader->fd_entity_source);
        if (ret < 0) {
                close(read_fd);
                return ret;
@@ -1399,7 +1399,7 @@ static int service_writer_handle_req_pipe(struct logger* server, struct writer*
 
        struct fd_entity pipe_entity = wr->fd_entity;
        set_read_fd_entity(&pipe_entity, pipe_fd[0]);
-       r = add_fd_entity(server, &pipe_entity);
+       r = add_fd_entity(&server->epoll_common, &pipe_entity);
        if (r < 0)
                goto err_close;
 
@@ -1415,7 +1415,7 @@ static int service_writer_handle_req_pipe(struct logger* server, struct writer*
        return 0;
 
 err_remove:
-       remove_fd_entity(server, &pipe_entity);
+       remove_fd_entity(&server->epoll_common, &pipe_entity);
 
 err_close:
        close(pipe_fd[0]);
@@ -1586,9 +1586,9 @@ static bool cond_service_reader(void *ptr, void *user_data)
 
        if (r > 0) {
                if (reader->fd_entity_sink.fd >= 0)
-                       remove_fd_entity(logger, &reader->fd_entity_sink);
+                       remove_fd_entity(&logger->epoll_common, &reader->fd_entity_sink);
                if (reader->fd_entity_source.fd >= 0)
-                       remove_fd_entity(logger, &reader->fd_entity_source);
+                       remove_fd_entity(&logger->epoll_common, &reader->fd_entity_source);
                reader_free(reader);
                return true;
        }
@@ -1608,7 +1608,7 @@ static bool cond_service_reader(void *ptr, void *user_data)
         * logs to trigger the flush and so any FDs representing connections
         * to such buffer would leak until a log finally arrived (which could
         * be never). This is why waiting is also done on EPOLLHUP. */
-       if (modify_fd_entity(logger, &reader->fd_entity_sink, (r == 0) ? EPOLLOUT : EPOLLHUP) < 0) {
+       if (modify_fd_entity(&logger->epoll_common, &reader->fd_entity_sink, (r == 0) ? EPOLLOUT : EPOLLHUP) < 0) {
                /* ignore, can't really happen and it's not
                 * like we can do anything about it either */
        }
@@ -1634,9 +1634,9 @@ static void dispatch_event_reader_common(struct logger *server, struct epoll_eve
                list_remove(&reader->buf_ptr->readers, reader);
                list_remove(&server->extra_readers, reader);
                if (reader->fd_entity_sink.fd >= 0)
-                       remove_fd_entity(server, &reader->fd_entity_sink);
+                       remove_fd_entity(&server->epoll_common, &reader->fd_entity_sink);
                if (reader->fd_entity_source.fd >= 0)
-                       remove_fd_entity(server, &reader->fd_entity_source);
+                       remove_fd_entity(&server->epoll_common, &reader->fd_entity_source);
                reader_free(reader);
                return;
        }
@@ -1645,9 +1645,9 @@ static void dispatch_event_reader_common(struct logger *server, struct epoll_eve
        int r = reader->service_reader(reader);
        if (r != 0) {
                if (reader->fd_entity_sink.fd >= 0)
-                       remove_fd_entity(server, &reader->fd_entity_sink);
+                       remove_fd_entity(&server->epoll_common, &reader->fd_entity_sink);
                if (reader->fd_entity_source.fd >= 0)
-                       remove_fd_entity(server, &reader->fd_entity_source);
+                       remove_fd_entity(&server->epoll_common, &reader->fd_entity_source);
        }
 }
 
@@ -1753,7 +1753,7 @@ static void logger_add_writer(struct logger* l, struct writer* wr)
        assert(wr);
 
        list_add(&l->writers, wr);
-       add_fd_entity(l, &wr->fd_entity);
+       add_fd_entity(&l->epoll_common, &wr->fd_entity);
 }
 
 int epoll_metadata_initialize(struct epoll_metadata *metadata)
@@ -1816,8 +1816,8 @@ static int logger_create(struct logger_config_data *data, struct logger *l)
 
        for (log_id_t id = 0; id < LOG_ID_MAX; id++)
                if (l->buffers[id]) {
-                       add_fd_entity(l, &l->buffers[id]->sock_ctl.fd_entity);
-                       add_fd_entity(l, &l->buffers[id]->sock_wr.fd_entity);
+                       add_fd_entity(&l->epoll_common, &l->buffers[id]->sock_ctl.fd_entity);
+                       add_fd_entity(&l->epoll_common, &l->buffers[id]->sock_wr.fd_entity);
                }
 
        /* TODO: make writers creation optional/configurable */