From: Yu Watanabe Date: Sat, 12 Apr 2025 14:49:45 +0000 (+0900) Subject: journal: use hash_ops with destructor that make JournalFile offline and close X-Git-Tag: v258-rc1~813^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c5ed1935164c80e9179fc83fd12e8c278a8c4417;p=thirdparty%2Fsystemd.git journal: use hash_ops with destructor that make JournalFile offline and close --- diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index a33c4b28242..9c57f98e03d 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -286,7 +286,7 @@ static int server_open_journal( (seal ? JOURNAL_SEAL : 0) | JOURNAL_STRICT_ORDER; - set_clear_with_destructor(s->deferred_closes, journal_file_offline_close); + set_clear(s->deferred_closes); if (reliably) r = journal_file_open_reliably( @@ -1477,8 +1477,8 @@ int server_relinquish_var(Server *s) { (void) server_system_journal_open(s, /* flush_requested */ false, /* relinquish_requested=*/ true); s->system_journal = journal_file_offline_close(s->system_journal); - ordered_hashmap_clear_with_destructor(s->user_journals, journal_file_offline_close); - set_clear_with_destructor(s->deferred_closes, journal_file_offline_close); + ordered_hashmap_clear(s->user_journals); + set_clear(s->deferred_closes); server_refresh_idle_timer(s); return 0; @@ -2503,7 +2503,7 @@ int server_init(Server *s, const char *namespace) { (void) mkdir_p(s->runtime_directory, 0755); - s->user_journals = ordered_hashmap_new(NULL); + s->user_journals = ordered_hashmap_new(&journal_file_hash_ops_offline_close); if (!s->user_journals) return log_oom(); @@ -2511,7 +2511,7 @@ int server_init(Server *s, const char *namespace) { if (!s->mmap) return log_oom(); - s->deferred_closes = set_new(NULL); + s->deferred_closes = set_new(&journal_file_hash_ops_offline_close); if (!s->deferred_closes) return log_oom(); @@ -2708,7 +2708,7 @@ Server* server_free(Server *s) { free(s->namespace); free(s->namespace_field); - set_free_with_destructor(s->deferred_closes, journal_file_offline_close); + set_free(s->deferred_closes); while (s->stdout_streams) stdout_stream_free(s->stdout_streams); @@ -2718,7 +2718,7 @@ Server* server_free(Server *s) { (void) journal_file_offline_close(s->system_journal); (void) journal_file_offline_close(s->runtime_journal); - ordered_hashmap_free_with_destructor(s->user_journals, journal_file_offline_close); + ordered_hashmap_free(s->user_journals); sd_varlink_server_unref(s->varlink_server); diff --git a/src/shared/journal-file-util.c b/src/shared/journal-file-util.c index 383c1354f33..b352ede275a 100644 --- a/src/shared/journal-file-util.c +++ b/src/shared/journal-file-util.c @@ -448,7 +448,7 @@ int journal_file_rotate( if (r < 0) return r; - set_clear_with_destructor(deferred_closes, journal_file_offline_close); + set_clear(deferred_closes); r = journal_file_open( /* fd= */ -EBADF, @@ -532,3 +532,8 @@ int journal_file_open_reliably( return journal_file_open(-EBADF, fname, open_flags, file_flags, mode, compress_threshold_bytes, metrics, mmap_cache, /* template = */ old_file, ret); } + +DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR( + journal_file_hash_ops_offline_close, + void, trivial_hash_func, trivial_compare_func, + JournalFile, journal_file_offline_close); diff --git a/src/shared/journal-file-util.h b/src/shared/journal-file-util.h index 8df10a79271..780fe5368ea 100644 --- a/src/shared/journal-file-util.h +++ b/src/shared/journal-file-util.h @@ -26,3 +26,5 @@ int journal_file_rotate( JournalFileFlags file_flags, uint64_t compress_threshold_bytes, Set *deferred_closes); + +extern const struct hash_ops journal_file_hash_ops_offline_close;