dlog_logger: allow multiplexing pipe storage readers 69/291569/3
authorMichal Bloch <m.bloch@samsung.com>
Mon, 17 Apr 2023 14:10:26 +0000 (16:10 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Fri, 21 Apr 2023 15:42:42 +0000 (17:42 +0200)
Change-Id: I634643dbc26f7f4a8fec2d0e86e12cd16e75bf6c
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
src/logger/logger.c
src/logger/reader_pipe.c
src/logger/reader_pipe.h

index e845c78..d8f844c 100644 (file)
@@ -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;
 
index dfacc5a..cca9ecf 100644 (file)
@@ -1,5 +1,6 @@
 #include "reader_pipe.h"
 
+#include <buffer_traits.h>
 #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);
index 3856147..7f9dccf 100644 (file)
@@ -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);