]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journald-socket: close previous socket when ForwardToSocket= is changed on reload
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 15 Jul 2025 16:42:26 +0000 (01:42 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 18 Jul 2025 06:27:37 +0000 (15:27 +0900)
src/journal/journald-config.c
src/journal/journald-socket.c
src/journal/journald-socket.h

index 5e6b0727516ea3183db1e5fa4328148b4332c974..b36f0a3bbea019019bb5bc8f6e384441b8419430 100644 (file)
@@ -9,6 +9,7 @@
 #include "journald-config.h"
 #include "journald-kmsg.h"
 #include "journald-manager.h"
+#include "journald-socket.h"
 #include "log.h"
 #include "parse-util.h"
 #include "proc-cmdline.h"
@@ -366,6 +367,7 @@ int manager_dispatch_reload_signal(sd_event_source *s, const struct signalfd_sig
 
         (void) manager_reopen_dev_kmsg(m, old.read_kmsg);
         manager_reset_kernel_audit(m, old.set_audit);
+        manager_reload_forward_socket(m, &old.forward_to_socket);
 
         r = manager_reload_journals(m);
         if (r < 0)
index 533fa664ced72bb80f320735754a3b3937b55e0e..ca341dcbddab91b28e3e6a5945488e0337d8802a 100644 (file)
@@ -163,3 +163,20 @@ int manager_forward_socket(
 
         return 0;
 }
+
+void manager_reload_forward_socket(Manager *m, const SocketAddress *old) {
+        assert(m);
+        assert(old);
+
+        /* The socket is not opened yet or already closed. There is nothing we need to do now. The socket
+         * will be opened when necessary. */
+        if (m->forward_socket_fd < 0)
+                return;
+
+        if (socket_address_equal(&m->config.forward_to_socket, old))
+                return;
+
+        /* A different socket address is specified. Let's close the old socket. New socket will be opened
+         * when necessary. */
+        m->forward_socket_fd = safe_close(m->forward_socket_fd);
+}
index 835c2459b81dd7a5a3597b58395b6b2185ee8041..4fae00698d42f0292a4802f1f396bc32a5b43f38 100644 (file)
@@ -4,3 +4,4 @@
 #include "journald-forward.h"
 
 int manager_forward_socket(Manager *m, const struct iovec *iovec, size_t n, const dual_timestamp *ts, int priority);
+void manager_reload_forward_socket(Manager *m, const SocketAddress *old);