From: Yu Watanabe Date: Tue, 15 Jul 2025 16:42:26 +0000 (+0900) Subject: journald-socket: close previous socket when ForwardToSocket= is changed on reload X-Git-Tag: v258-rc1~34^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=20f23d13b4cf075d92433be8d2eb7a6951e2ee8e;p=thirdparty%2Fsystemd.git journald-socket: close previous socket when ForwardToSocket= is changed on reload --- diff --git a/src/journal/journald-config.c b/src/journal/journald-config.c index 5e6b0727516..b36f0a3bbea 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 533fa664ced..ca341dcbdda 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 835c2459b81..4fae00698d4 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);