From bcdcd64e371959c401283af143c7751fe3acea58 Mon Sep 17 00:00:00 2001 From: Michal Bloch Date: Mon, 17 Apr 2023 16:10:26 +0200 Subject: [PATCH] dlog_logger: allow multiplexing pipe storage readers Change-Id: I634643dbc26f7f4a8fec2d0e86e12cd16e75bf6c Signed-off-by: Michal Bloch --- src/logger/logger.c | 6 +----- src/logger/reader_pipe.c | 24 ++++++++++++++++-------- src/logger/reader_pipe.h | 2 +- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/logger/logger.c b/src/logger/logger.c index e845c78..d8f844c 100644 --- a/src/logger/logger.c +++ b/src/logger/logger.c @@ -247,15 +247,11 @@ static int create_reader_pipe_from_dlogutil_line(struct dlogutil_line_params *pa return retval; } - log_id_t buf_id = bit_single(params->enabled_buffers); - if (!is_core_buffer(buf_id)) - return -EINVAL; - if ((params->file.path == NULL && !params->compression) || (params->file.path != NULL && params->compression)) return -EINVAL; - retval = reader_pipe_init(&reader, buf_id, server, params->monitor, params->is_dumping); + retval = reader_pipe_init(&reader, params->enabled_buffers, server, params->monitor, params->is_dumping); if (retval != 0) return retval; diff --git a/src/logger/reader_pipe.c b/src/logger/reader_pipe.c index dfacc5a..cca9ecf 100644 --- a/src/logger/reader_pipe.c +++ b/src/logger/reader_pipe.c @@ -1,5 +1,6 @@ #include "reader_pipe.h" +#include #include "logger_internal.h" static void reader_pipe_free(struct reader_common *_reader) @@ -44,23 +45,30 @@ static struct reader_pipe *reader_pipe_alloc(struct logger *server, bool monitor return ret; } -int reader_pipe_init(struct reader_pipe **reader, log_id_t buf_id, struct logger *server, +int reader_pipe_init(struct reader_pipe **reader, int enabled_buffers, struct logger *server, bool monitor, bool is_dumping) { assert(reader); - assert(buf_id > LOG_ID_INVALID); - assert(buf_id < LOG_ID_MAX); assert(server); __attribute__((cleanup(reader_free_ptr))) struct reader_pipe *ret = reader_pipe_alloc(server, monitor, is_dumping); if (!ret) return -ENOMEM; - log_storage_reader *const lsr = log_storage_new_reader(server->buffers[buf_id]->log_storage_ptr, - is_dumping, monitor, reader_pipe_notify_losing_log, ret); - if (!lsr) - return -ENOMEM; - ret->log_storage_reader_ptrs[0] = lsr; + for (int i = 0; i < LOG_ID_MAX; ++i) { + if (!(enabled_buffers & (1 << i))) + continue; + + const struct log_buffer *const buffer = server->buffers[i]; + if (!buffer) + continue; + + log_storage_reader *const lsr = log_storage_new_reader(buffer->log_storage_ptr, + is_dumping, monitor, reader_pipe_notify_losing_log, ret); + if (!lsr) + return -ENOMEM; + ret->log_storage_reader_ptrs[i] = lsr; + } init_fd_entity(&ret->common.fd_entity_sink, dispatch_event_reader, ret); init_fd_entity(&ret->common.fd_entity_source, dispatch_event_reader, ret); diff --git a/src/logger/reader_pipe.h b/src/logger/reader_pipe.h index 3856147..7f9dccf 100644 --- a/src/logger/reader_pipe.h +++ b/src/logger/reader_pipe.h @@ -14,7 +14,7 @@ struct reader_pipe { log_storage_reader *log_storage_reader_ptrs[LOG_ID_MAX]; }; -int reader_pipe_init(struct reader_pipe **reader, log_id_t buf_id, struct logger *server, +int reader_pipe_init(struct reader_pipe **reader, int enabled_buffers, struct logger *server, bool monitor, bool is_dumping); int reader_pipe_init_with_writer(struct reader_pipe **reader, struct writer *writer, struct logger *server, bool monitor, bool is_dumping); -- 2.7.4