From ca25c8a5e24e678c5c3d6bd408359185e6e3b7b9 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 19 Feb 2025 00:58:19 +0900 Subject: [PATCH 1/2] journal-remote: modernize source_free() - make it return NULL, - suppress log message about reference counter of writer unless trace logging is enabled, - introduce cleanup function for RemoteSource. --- src/journal-remote/journal-remote-parse.c | 8 ++++---- src/journal-remote/journal-remote-parse.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/journal-remote/journal-remote-parse.c b/src/journal-remote/journal-remote-parse.c index d743b217b0..2ef084f502 100644 --- a/src/journal-remote/journal-remote-parse.c +++ b/src/journal-remote/journal-remote-parse.c @@ -6,20 +6,20 @@ #include "parse-util.h" #include "string-util.h" -void source_free(RemoteSource *source) { +RemoteSource* source_free(RemoteSource *source) { if (!source) - return; + return NULL; journal_importer_cleanup(&source->importer); - log_debug("Writer ref count %u", source->writer->n_ref); + log_trace("Writer ref count %u", source->writer->n_ref); writer_unref(source->writer); sd_event_source_unref(source->event); sd_event_source_unref(source->buffer_event); free(source->encoding); - free(source); + return mfree(source); } /** diff --git a/src/journal-remote/journal-remote-parse.h b/src/journal-remote/journal-remote-parse.h index 89d30b8721..afe83dfc0f 100644 --- a/src/journal-remote/journal-remote-parse.h +++ b/src/journal-remote/journal-remote-parse.h @@ -19,5 +19,6 @@ typedef struct RemoteSource { } RemoteSource; RemoteSource* source_new(int fd, bool passive_fd, char *name, Writer *writer); -void source_free(RemoteSource *source); +RemoteSource* source_free(RemoteSource *source); +DEFINE_TRIVIAL_CLEANUP_FUNC(RemoteSource*, source_free); int process_source(RemoteSource *source, JournalFileFlags file_flags); From 54258df8296b28ea889cc789954b62c96d97dc36 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 19 Feb 2025 00:59:50 +0900 Subject: [PATCH 2/2] journal-remote: fix memleak Fixes a bug introduced by cfaf78001c3451d549bcb1ee4adca3e85b934e56. Fixes CID#1591182. --- src/journal-remote/journal-remote-main.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c index e881324138..6a47c99493 100644 --- a/src/journal-remote/journal-remote-main.c +++ b/src/journal-remote/journal-remote-main.c @@ -186,24 +186,22 @@ static int build_accept_encoding(char **ret) { } static int request_meta(void **connection_cls, int fd, char *hostname) { - RemoteSource *source; - Writer *writer; int r; assert(connection_cls); - if (*connection_cls) - return 0; + if (*connection_cls) + return 0; /* already assigned. */ + + Writer *writer; r = journal_remote_get_writer(journal_remote_server_global, hostname, &writer); if (r < 0) return log_warning_errno(r, "Failed to get writer for source %s: %m", hostname); - source = source_new(fd, true, hostname, writer); - if (!source) { - writer_unref(writer); + _cleanup_(source_freep) RemoteSource *source = source_new(fd, true, hostname, writer); + if (!source) return log_oom(); - } log_debug("Added RemoteSource as connection metadata %p", source); @@ -212,7 +210,7 @@ static int request_meta(void **connection_cls, int fd, char *hostname) { return log_oom(); source->compression = COMPRESSION_NONE; - *connection_cls = source; + *connection_cls = TAKE_PTR(source); return 0; }