From 178e65b7321352b743ceb8f0655b7a852171f138 Mon Sep 17 00:00:00 2001 From: Michal Bloch Date: Wed, 8 Jan 2020 16:47:02 +0100 Subject: [PATCH] dlog_logger: wrap reader read_fd in an FD entity No logic change so far; will be made to work with epoll in a subsequent patch. Change-Id: I9a3d199206b392976a63ae7b66bb14d4e8616a90 Signed-off-by: Michal Bloch --- src/logger/logger.c | 20 +++++++++++++------- src/logger/logger_internal.h | 2 +- src/tests/logger.c | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/logger/logger.c b/src/logger/logger.c index 3f7c456..279ce55 100644 --- a/src/logger/logger.c +++ b/src/logger/logger.c @@ -40,6 +40,7 @@ static int service_writer_handle_req_pipe(struct logger *server, struct writer * void dispatch_event_writer(struct logger *server, struct epoll_event *event); void dispatch_event_sock(struct logger *server, struct epoll_event *event); static void dispatch_event_reader_sink(struct logger *server, struct epoll_event *event); +static void dispatch_event_reader_source(struct logger *server, struct epoll_event *event); void reader_free(struct reader* reader); static void logger_free(struct logger* l); static int parse_args(int argc, char **argv, struct buf_params *b); @@ -771,8 +772,8 @@ void reader_free(struct reader* reader) if (reader->fd_entity_sink.fd >= 0) close(reader->fd_entity_sink.fd); - if (reader->read_fd >= 0) - close(reader->read_fd); + if (reader->fd_entity_source.fd >= 0) + close(reader->fd_entity_source.fd); logfile_free(&reader->file); if (reader->filter) log_filter_free(reader->filter); @@ -806,7 +807,7 @@ int service_reader_file(struct reader* reader) */ int max_loop_iterations = g_backend.logger_device_throttling[reader->buf_id]; while (max_loop_iterations--) { - int r = read(reader->read_fd, buffer, sizeof buffer - 1); + int r = read(reader->fd_entity_source.fd, buffer, sizeof buffer - 1); if (r == 0) break; else if (r == -1) { @@ -890,7 +891,7 @@ static int add_reader(struct logger *server, struct reader *reader) if (reader->buf_ptr) return add_buffer_reader(reader->buf_ptr, reader); - assert(reader->read_fd >= 0); + assert(reader->fd_entity_source.fd >= 0); return list_add(&server->extra_readers, reader) ? 0 : -ENOMEM; } @@ -932,7 +933,7 @@ int reader_init_for_logger(struct reader *reader, const char *buf_name, struct l return -ENOENT; reader->buf_id = buf_id; - int ret = logger_open_buffer(buf_id, config_list, O_RDONLY | O_NONBLOCK, &reader->read_fd); + int ret = logger_open_buffer(buf_id, config_list, O_RDONLY | O_NONBLOCK, &reader->fd_entity_source.fd); if (ret <= 0) return -ENOENT; @@ -1037,6 +1038,7 @@ static int parse_command_line(const char *cmdl, struct writer *wr, struct logger } init_fd_entity(&reader->fd_entity_sink, dispatch_event_reader_sink, reader); + init_fd_entity(&reader->fd_entity_source, dispatch_event_reader_source, reader); logfile_init(&reader->file); @@ -1046,7 +1048,6 @@ static int parse_command_line(const char *cmdl, struct writer *wr, struct logger reader->buf_ptr = NULL; reader->buf_id = -1; - reader->read_fd = -1; reader->dumpcount = false; reader->partial_log_size = 0; reader->service_reader = NULL; @@ -1143,7 +1144,7 @@ static int parse_command_line(const char *cmdl, struct writer *wr, struct logger else if (!silence) dlogutil_filter_options_filterspec(reader->filter, "*:D"); - if ((reader->read_fd < 0) && !reader->buf_ptr) { + if ((reader->fd_entity_source.fd < 0) && !reader->buf_ptr) { retval = -EINVAL; goto cleanup; } @@ -1584,6 +1585,11 @@ static void dispatch_event_reader_sink(struct logger *server, struct epoll_event remove_fd_entity(server, &reader->fd_entity_sink); } +static void dispatch_event_reader_source(struct logger *server, struct epoll_event *event) +{ + // Work in progress, unused yet +} + /** * @brief Service syslog * @details Read from the syslog socket diff --git a/src/logger/logger_internal.h b/src/logger/logger_internal.h index 947f82e..86bc3b9 100644 --- a/src/logger/logger_internal.h +++ b/src/logger/logger_internal.h @@ -135,10 +135,10 @@ typedef int (*service_reader_t)(struct reader *reader); struct reader { struct fd_entity fd_entity_sink; + struct fd_entity fd_entity_source; struct log_file file; dlogutil_filter_options_s* filter; struct log_buffer* buf_ptr; - int read_fd; bool dumpcount; struct timespec last_read_time; int partial_log_size; diff --git a/src/tests/logger.c b/src/tests/logger.c index c16d417..98515a6 100644 --- a/src/tests/logger.c +++ b/src/tests/logger.c @@ -840,7 +840,7 @@ int main() reader2->file.fd = 3; reader2->fd_entity_sink = ent; assert(reader2->fd_entity_sink.fd == 2); - reader2->read_fd = 1; + reader2->fd_entity_source.fd = 1; reader2->log_storage_reader = (log_storage_reader *)13; closed[0] = closed[1] = false; reader_free(reader2); -- 2.7.4