summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/main.c10
-rw-r--r--src/core/manager.c12
-rw-r--r--src/core/manager.h1
-rw-r--r--units/user@.service.in2
4 files changed, 24 insertions, 1 deletions
diff --git a/src/core/main.c b/src/core/main.c
index c833050db0..94055f08de 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -1961,6 +1961,8 @@ static int invoke_main_loop(
LogTarget saved_log_target;
int saved_log_level;
+ manager_send_reloading(m);
+
log_info("Reloading.");
/* First, save any overridden log level/target, then parse the configuration file,
@@ -1991,6 +1993,10 @@ static int invoke_main_loop(
}
case MANAGER_REEXECUTE:
+
+ manager_send_reloading(m); /* From the perspective of the manager calling us this is
+ * pretty much the same as a reload */
+
r = prepare_reexecute(m, &arg_serialization, ret_fds, false);
if (r < 0) {
*ret_error_message = "Failed to prepare for reexecution";
@@ -2005,6 +2011,10 @@ static int invoke_main_loop(
return objective;
case MANAGER_SWITCH_ROOT:
+
+ manager_send_reloading(m); /* From the perspective of the manager calling us this is
+ * pretty much the same as a reload */
+
manager_set_switching_root(m, true);
if (!m->switch_root_init) {
diff --git a/src/core/manager.c b/src/core/manager.c
index 0aed7de15c..f8576cca1a 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -3648,6 +3648,18 @@ void manager_check_finished(Manager *m) {
manager_invalidate_startup_units(m);
}
+void manager_send_reloading(Manager *m) {
+ assert(m);
+
+ /* Let whoever invoked us know that we are now reloading */
+ (void) sd_notifyf(/* unset= */ false,
+ "RELOADING=1\n"
+ "MONOTONIC_USEC=" USEC_FMT "\n", now(CLOCK_MONOTONIC));
+
+ /* And ensure that we'll send READY=1 again as soon as we are ready again */
+ m->ready_sent = false;
+}
+
static bool generator_path_any(const char* const* paths) {
bool found = false;
diff --git a/src/core/manager.h b/src/core/manager.h
index 4d4b56c3cc..c13de8fe78 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -538,6 +538,7 @@ void manager_send_unit_plymouth(Manager *m, Unit *u);
bool manager_unit_inactive_or_pending(Manager *m, const char *name);
void manager_check_finished(Manager *m);
+void manager_send_reloading(Manager *m);
void disable_printk_ratelimit(void);
void manager_recheck_dbus(Manager *m);
diff --git a/units/user@.service.in b/units/user@.service.in
index 1660de0326..1558764909 100644
--- a/units/user@.service.in
+++ b/units/user@.service.in
@@ -17,7 +17,7 @@ IgnoreOnIsolate=yes
[Service]
User=%i
PAMName=systemd-user
-Type=notify
+Type=notify-reload
ExecStart={{ROOTLIBEXECDIR}}/systemd --user
Slice=user-%i.slice
KillMode=mixed