dlog_logger: commonize reader threading facilities
[platform/core/system/dlog.git] / src / logger / reader_common.c
index c550194..aa93119 100644 (file)
@@ -17,6 +17,9 @@ static void close_reader_fd_entity(struct fd_entity *fde, struct epoll_metadata
 
 static void reader_deinit_common(struct reader_common *reader)
 {
+       if (reader->thread)
+               pthread_join(reader->thread, NULL);
+
        list_clear_custom(&reader->subs, NULL, subreader_free);
 
        if (reader->server) {
@@ -34,6 +37,7 @@ int reader_apply_log_to_subs(struct reader_common *reader, const struct dlogutil
 void reader_common_init(struct reader_common *reader, struct logger *server)
 {
        reader->server = server;
+       reader->thread = 0;
        init_fd_entity(&reader->fd_entity_sink  , NULL, NULL);
        init_fd_entity(&reader->fd_entity_source, NULL, NULL);
 }
@@ -105,6 +109,17 @@ reader_free:
        reader_free(reader);
 }
 
+int reader_run(struct reader_common *const reader)
+{
+       pthread_t thread;
+       int r = pthread_create(&thread, NULL, reader->thread_func, reader);
+       if (r < 0)
+               return r;
+
+       reader->thread = thread;
+       return 0;
+}
+
 int reader_flush(struct reader_common *reader, struct timespec now_mono, int flush)
 {
        return list_foreach_ret(reader->subs, &(struct subreader_flush_args) {