]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
daemon-util: introduce notify_reloading helper
authorMike Yuan <me@yhndnzj.com>
Tue, 26 Mar 2024 09:40:01 +0000 (17:40 +0800)
committerLuca Boccassi <luca.boccassi@gmail.com>
Tue, 26 Mar 2024 12:52:33 +0000 (12:52 +0000)
Prompted by #31951

src/core/manager.c
src/login/logind.c
src/network/networkd-manager.c
src/shared/daemon-util.c
src/shared/daemon-util.h
src/udev/udev-manager.c

index 7eeb7f3a26ba9130f75dbdc54a0702a2286cc7b5..b2d8457790729008603f17016d86a24f7a02b103 100644 (file)
@@ -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;
index 415d63da1f86c2e2a031930bdf711e2fdacf1792..4d3d0270effa718a3e78b4f247b830a610852fc8 100644 (file)
@@ -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);
index 5c50b3c98a26321e60e03719302fa31ffe765803..15f5e8a6ccbc038818c9c2a1f3f809c0157c8407 100644 (file)
@@ -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)
index 32180a14bb44307772f50429199e6a06559e3bbf..aa386b42021e243c06eb2b50e901759f788ce011 100644 (file)
@@ -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;
+}
index 711885bba462a89df59e61693b6f9973c069009d..cbefa8dd8f50f3812ed35590aee049ceb085a701 100644 (file)
@@ -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 charnotify_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...");
+}
index 0b6cfb1655a1165892ea3d4f20bea8083515f09b..1f8d8e4950b70a36c016ce4c57415f1fb28296fb 100644 (file)
@@ -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);