]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journal: use hash_ops with destructor that make JournalFile offline and close
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 12 Apr 2025 14:49:45 +0000 (23:49 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 13 Apr 2025 00:57:19 +0000 (09:57 +0900)
src/journal/journald-server.c
src/shared/journal-file-util.c
src/shared/journal-file-util.h

index a33c4b282428ad5a157f8da8be34bac90077ff3f..9c57f98e03d33aa1e343347357319f15d0d56b0e 100644 (file)
@@ -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);
 
index 383c1354f3328ee78a2a58ddbd5472f7105b7697..b352ede275a6b2b33dadb43ff24b53346c77bd52 100644 (file)
@@ -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);
index 8df10a79271be17ded5e3690a8e636609a30fa9d..780fe5368eaba9ab50b88d7dd193a47a171ead5a 100644 (file)
@@ -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;