mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
systemctl: ignore SIGTERM after switch root
https://bugzilla.redhat.com/show_bug.cgi?id=1414904#c14 and #c15.
This commit is contained in:
@@ -5663,6 +5663,14 @@ static int switch_root(int argc, char *argv[], void *userdata) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* If we are slow to exit after the root switch, the new systemd instance
|
||||
* will send us a signal to terminate. Just ignore it and exit normally.
|
||||
* This way the unit does not end up as failed.
|
||||
*/
|
||||
r = ignore_signals(SIGTERM, -1);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to change disposition of SIGTERM to ignore: %m");
|
||||
|
||||
log_debug("Switching root - root: %s; init: %s", root, strna(init));
|
||||
|
||||
r = sd_bus_call_method(
|
||||
@@ -5674,8 +5682,11 @@ static int switch_root(int argc, char *argv[], void *userdata) {
|
||||
&error,
|
||||
NULL,
|
||||
"ss", root, init);
|
||||
if (r < 0)
|
||||
if (r < 0) {
|
||||
(void) default_signals(SIGTERM, -1);
|
||||
|
||||
return log_error_errno(r, "Failed to switch root: %s", bus_error_message(&error, r));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user