Android logger config readers now aggregated 66/240366/2
authorMichal Bloch <m.bloch@samsung.com>
Wed, 5 Aug 2020 20:28:02 +0000 (22:28 +0200)
committerMichal Bloch <m.bloch@samsung.com>
Thu, 6 Aug 2020 11:24:41 +0000 (13:24 +0200)
This should result in a single read() call to populate
multiple /var/log/dlog/x files under the same buffer.

Change-Id: I28428abfda4fcd142f3de95ff61fdf31e2c9cb87
Signed-off-by: Michal Bloch <m.bloch@samsung.com>
src/logger/logger.c

index 1fe8430..f33c9c0 100644 (file)
@@ -55,6 +55,7 @@ static struct {
        bool use_logger_by_default;
        char logger_devices[LOG_ID_MAX][MAX_CONF_VAL_LEN];
        int logger_device_throttling[LOG_ID_MAX];
+       struct reader_logger *logger_readers[LOG_ID_MAX];
 } g_backend = {};
 
 static const int DEFAULT_EPOLL_TIME_MS = 1000;
@@ -1155,16 +1156,11 @@ static int reader_logger_init(struct reader_logger **reader, log_id_t buf_id, st
        int read_fd = -1;
        int r = logger_open_buffer(buf_id, config_list, O_RDONLY | O_NONBLOCK, &read_fd);
        if (r <= 0)
-               return -ENOENT;
+               return r;
 
        init_fd_entity(&ret->common.fd_entity_sink, dispatch_event_reader_logger, ret);
        init_fd_entity(&ret->common.fd_entity_source, dispatch_event_reader_logger, ret);
        set_read_fd_entity(&ret->common.fd_entity_source, read_fd);
-       r = add_fd_entity(&server->epoll_common, &ret->common.fd_entity_source);
-       if (r < 0) {
-               close(read_fd);
-               return r;
-       }
 
        *reader = ret;
        ret = NULL;
@@ -1392,16 +1388,10 @@ static int get_dlogutil_line_params(const char *cmdl, struct dlogutil_line_param
        return get_dlogutil_params_from_argc_argv(argc, argv, params);
 }
 
-static int create_reader_logger_from_dlogutil_line(struct dlogutil_line_params *params, struct logger *server, struct reader_logger **rd)
+static int create_logger_subreader_from_dlogutil_line(struct dlogutil_line_params *params)
 {
-       assert(server);
-       assert(rd);
-
-       __attribute__((cleanup(reader_logger_cleanup))) struct reader_logger *reader = NULL;
-       int retval;
-
        if (params->file_path) {
-               retval = logfile_set_path(&params->file, params->file_path);
+               int retval = logfile_set_path(&params->file, params->file_path);
                if (retval < 0)
                        return retval;
 
@@ -1416,18 +1406,11 @@ static int create_reader_logger_from_dlogutil_line(struct dlogutil_line_params *
        if (params->file.path == NULL)
                return -EINVAL;
 
-       retval = reader_logger_init(&reader, params->buf_id, server);
-       if (retval != 0)
-               return retval;
-
-       retval = reader_logger_add_subreader_file(reader, params->filter, &params->file);
-       if (retval < 0)
-               return retval;
-
-       *rd = reader;
-       reader = NULL;
+       struct reader_logger *const reader = g_backend.logger_readers[params->buf_id];
+       if (!reader)
+               return -ENOENT;
 
-       return 0;
+       return reader_logger_add_subreader_file(reader, params->filter, &params->file);
 }
 
 static int create_reader_pipe_from_dlogutil_line(struct dlogutil_line_params *params, struct logger *server, struct reader_pipe **rd)
@@ -2119,6 +2102,22 @@ static int logger_create(struct logger_config_data *data, struct logger *l)
 
        l->buf_params = data->buf_params;
 
+       if (g_backend.use_logger_by_default)
+               for (log_id_t id = 0; id < LOG_ID_MAX; ++id) {
+                       if (!is_core_buffer(id))
+                               continue;
+
+                       int r = reader_logger_init(g_backend.logger_readers + id, id, l);
+                       if (r < 0)
+                               return r;
+                       if (!g_backend.logger_readers[id])
+                               continue;
+
+                       r = add_reader_logger(l, g_backend.logger_readers[id]);
+                       if (r < 0)
+                               return r;
+               }
+
        for (log_id_t id = 0; id < LOG_ID_MAX; id++)
                if (data->is_buffer_enabled[id]) {
                        int r = buffer_create(&l->buffers[id], id, data->buffers + id);
@@ -2584,10 +2583,7 @@ void parse_logfile_config(void *value, void *userdata)
 
        int r;
        if (g_backend.use_logger_by_default && is_core_buffer(params.buf_id)) {
-               struct reader_logger *reader = NULL;
-               r = create_reader_logger_from_dlogutil_line(&params, server, &reader);
-               if (r == 0)
-                       add_reader_logger(server, reader);
+               r = create_logger_subreader_from_dlogutil_line(&params);
        } else {
                struct reader_pipe *reader = NULL;
                r = create_reader_pipe_from_dlogutil_line(&params, server, &reader);