journald-socket: close previous socket when ForwardToSocket= is changed on reload

This commit is contained in:
Yu Watanabe
2025-07-16 01:42:26 +09:00
parent cbf59f4bb2
commit 20f23d13b4
3 changed files with 20 additions and 0 deletions

View 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)

View 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);
}

View 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);