From 20f23d13b4cf075d92433be8d2eb7a6951e2ee8e Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 16 Jul 2025 01:42:26 +0900 Subject: [PATCH] journald-socket: close previous socket when ForwardToSocket= is changed on reload --- src/journal/journald-config.c | 2 ++ src/journal/journald-socket.c | 17 +++++++++++++++++ src/journal/journald-socket.h | 1 + 3 files changed, 20 insertions(+) diff --git a/src/journal/journald-config.c b/src/journal/journald-config.c index 5e6b072751..b36f0a3bbe 100644 --- a/src/journal/journald-config.c +++ b/src/journal/journald-config.c @@ -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) diff --git a/src/journal/journald-socket.c b/src/journal/journald-socket.c index 533fa664ce..ca341dcbdd 100644 --- a/src/journal/journald-socket.c +++ b/src/journal/journald-socket.c @@ -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); +} diff --git a/src/journal/journald-socket.h b/src/journal/journald-socket.h index 835c2459b8..4fae00698d 100644 --- a/src/journal/journald-socket.h +++ b/src/journal/journald-socket.h @@ -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);