mirror of
https://github.com/systemd/systemd
synced 2024-10-15 12:34:37 +00:00
pid1: make sure we send our calling service manager RELOADING=1 when reloading
And send READY=1 again when we are done with it. We do this not only for "daemon-reload" but also for "daemon-reexec" and "switch-root", since from the perspective of an encapsulating service manager these three operations are not that different.
This commit is contained in:
parent
81e19b6f65
commit
dd0ab174c3
|
@ -1961,6 +1961,8 @@ static int invoke_main_loop(
|
||||||
LogTarget saved_log_target;
|
LogTarget saved_log_target;
|
||||||
int saved_log_level;
|
int saved_log_level;
|
||||||
|
|
||||||
|
manager_send_reloading(m);
|
||||||
|
|
||||||
log_info("Reloading.");
|
log_info("Reloading.");
|
||||||
|
|
||||||
/* First, save any overridden log level/target, then parse the configuration file,
|
/* First, save any overridden log level/target, then parse the configuration file,
|
||||||
|
@ -1991,6 +1993,10 @@ static int invoke_main_loop(
|
||||||
}
|
}
|
||||||
|
|
||||||
case MANAGER_REEXECUTE:
|
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);
|
r = prepare_reexecute(m, &arg_serialization, ret_fds, false);
|
||||||
if (r < 0) {
|
if (r < 0) {
|
||||||
*ret_error_message = "Failed to prepare for reexecution";
|
*ret_error_message = "Failed to prepare for reexecution";
|
||||||
|
@ -2005,6 +2011,10 @@ static int invoke_main_loop(
|
||||||
return objective;
|
return objective;
|
||||||
|
|
||||||
case MANAGER_SWITCH_ROOT:
|
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);
|
manager_set_switching_root(m, true);
|
||||||
|
|
||||||
if (!m->switch_root_init) {
|
if (!m->switch_root_init) {
|
||||||
|
|
|
@ -3648,6 +3648,18 @@ void manager_check_finished(Manager *m) {
|
||||||
manager_invalidate_startup_units(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) {
|
static bool generator_path_any(const char* const* paths) {
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
|
|
|
@ -538,6 +538,7 @@ void manager_send_unit_plymouth(Manager *m, Unit *u);
|
||||||
bool manager_unit_inactive_or_pending(Manager *m, const char *name);
|
bool manager_unit_inactive_or_pending(Manager *m, const char *name);
|
||||||
|
|
||||||
void manager_check_finished(Manager *m);
|
void manager_check_finished(Manager *m);
|
||||||
|
void manager_send_reloading(Manager *m);
|
||||||
|
|
||||||
void disable_printk_ratelimit(void);
|
void disable_printk_ratelimit(void);
|
||||||
void manager_recheck_dbus(Manager *m);
|
void manager_recheck_dbus(Manager *m);
|
||||||
|
|
|
@ -17,7 +17,7 @@ IgnoreOnIsolate=yes
|
||||||
[Service]
|
[Service]
|
||||||
User=%i
|
User=%i
|
||||||
PAMName=systemd-user
|
PAMName=systemd-user
|
||||||
Type=notify
|
Type=notify-reload
|
||||||
ExecStart={{ROOTLIBEXECDIR}}/systemd --user
|
ExecStart={{ROOTLIBEXECDIR}}/systemd --user
|
||||||
Slice=user-%i.slice
|
Slice=user-%i.slice
|
||||||
KillMode=mixed
|
KillMode=mixed
|
||||||
|
|
Loading…
Reference in a new issue