summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMike Yuan <me@yhndnzj.com>2024-03-26 10:40:01 +0100
committerLuca Boccassi <luca.boccassi@gmail.com>2024-03-26 13:52:33 +0100
commitb377a7cce99ac7aa35061e694550512a16e17cf8 (patch)
tree7e82a61864d6f9a36bb0e2d0ed7bd0ef57121d74 /src
parentMerge pull request #29721 from poettering/systemd-project (diff)
downloadsystemd-b377a7cce99ac7aa35061e694550512a16e17cf8.tar.xz
systemd-b377a7cce99ac7aa35061e694550512a16e17cf8.zip
daemon-util: introduce notify_reloading helper
Prompted by #31951
Diffstat (limited to 'src')
-rw-r--r--src/core/manager.c5
-rw-r--r--src/login/logind.c5
-rw-r--r--src/network/networkd-manager.c5
-rw-r--r--src/shared/daemon-util.c16
-rw-r--r--src/shared/daemon-util.h7
-rw-r--r--src/udev/udev-manager.c10
6 files changed, 28 insertions, 20 deletions
diff --git a/src/core/manager.c b/src/core/manager.c
index 7eeb7f3a26..b2d8457790 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -37,6 +37,7 @@
#include "constants.h"
#include "core-varlink.h"
#include "creds-util.h"
+#include "daemon-util.h"
#include "dbus-job.h"
#include "dbus-manager.h"
#include "dbus-unit.h"
@@ -3879,9 +3880,7 @@ void manager_send_reloading(Manager *m) {
assert(m);
/* Let whoever invoked us know that we are now reloading */
- (void) sd_notifyf(/* unset_environment= */ false,
- "RELOADING=1\n"
- "MONOTONIC_USEC=" USEC_FMT "\n", now(CLOCK_MONOTONIC));
+ (void) notify_reloading_full(/* status = */ NULL);
/* And ensure that we'll send READY=1 again as soon as we are ready again */
m->ready_sent = false;
diff --git a/src/login/logind.c b/src/login/logind.c
index 415d63da1f..4d3d0270ef 100644
--- a/src/login/logind.c
+++ b/src/login/logind.c
@@ -1068,10 +1068,7 @@ static int manager_dispatch_reload_signal(sd_event_source *s, const struct signa
Manager *m = userdata;
int r;
- (void) sd_notifyf(/* unset= */ false,
- "RELOADING=1\n"
- "STATUS=Reloading configuration...\n"
- "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC));
+ (void) notify_reloading();
manager_reset_config(m);
r = manager_parse_config_file(m);
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index 5c50b3c98a..15f5e8a6cc 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -1120,10 +1120,7 @@ int manager_reload(Manager *m, sd_bus_message *message) {
assert(m);
- (void) sd_notifyf(/* unset= */ false,
- "RELOADING=1\n"
- "STATUS=Reloading configuration...\n"
- "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC));
+ (void) notify_reloading();
r = netdev_load(m, /* reload= */ true);
if (r < 0)
diff --git a/src/shared/daemon-util.c b/src/shared/daemon-util.c
index 32180a14bb..aa386b4202 100644
--- a/src/shared/daemon-util.c
+++ b/src/shared/daemon-util.c
@@ -4,6 +4,7 @@
#include "fd-util.h"
#include "log.h"
#include "string-util.h"
+#include "time-util.h"
static int notify_remove_fd_warn(const char *name) {
int r;
@@ -74,3 +75,18 @@ int notify_push_fdf(int fd, const char *format, ...) {
return notify_push_fd(fd, name);
}
+
+int notify_reloading_full(const char *status) {
+ int r;
+
+ r = sd_notifyf(/* unset_environment = */ false,
+ "RELOADING=1\n"
+ "MONOTONIC_USEC=" USEC_FMT
+ "%s%s",
+ now(CLOCK_MONOTONIC),
+ status ? "\nSTATUS=" : "", strempty(status));
+ if (r < 0)
+ return log_debug_errno(r, "Failed to notify service manager for reloading status: %m");
+
+ return 0;
+}
diff --git a/src/shared/daemon-util.h b/src/shared/daemon-util.h
index 711885bba4..cbefa8dd8f 100644
--- a/src/shared/daemon-util.h
+++ b/src/shared/daemon-util.h
@@ -10,7 +10,7 @@
#define NOTIFY_READY "READY=1\n" "STATUS=Processing requests..."
#define NOTIFY_STOPPING "STOPPING=1\n" "STATUS=Shutting down..."
-static inline const char *notify_start(const char *start, const char *stop) {
+static inline const char* notify_start(const char *start, const char *stop) {
if (start)
(void) sd_notify(false, start);
@@ -26,3 +26,8 @@ static inline void notify_on_cleanup(const char **p) {
int notify_remove_fd_warnf(const char *format, ...) _printf_(1, 2);
int close_and_notify_warn(int fd, const char *name);
int notify_push_fdf(int fd, const char *format, ...) _printf_(2, 3);
+
+int notify_reloading_full(const char *status);
+static inline int notify_reloading(void) {
+ return notify_reloading_full("Reloading configuration...");
+}
diff --git a/src/udev/udev-manager.c b/src/udev/udev-manager.c
index 0b6cfb1655..1f8d8e4950 100644
--- a/src/udev/udev-manager.c
+++ b/src/udev/udev-manager.c
@@ -274,15 +274,9 @@ static void manager_reload(Manager *manager, bool force) {
return;
/* If we eat this up, then tell our service manager to just continue */
- (void) sd_notifyf(/* unset= */ false,
- "RELOADING=1\n"
- "STATUS=Skipping configuration reloading, nothing changed.\n"
- "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC));
+ (void) notify_reloading_full("Skipping configuration reloading, nothing changed.");
} else {
- (void) sd_notifyf(/* unset= */ false,
- "RELOADING=1\n"
- "STATUS=Flushing configuration...\n"
- "MONOTONIC_USEC=" USEC_FMT, now(CLOCK_MONOTONIC));
+ (void) notify_reloading();
manager_kill_workers(manager, false);