dlog_logger: allow multiplexing pipe storage readers
[platform/core/system/dlog.git] / src / logger / reader_pipe.c
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);