51 lines
1.8 KiB
Diff
51 lines
1.8 KiB
Diff
|
From 9bfcda9528636914aef3e0ab91191bb81654c83d Mon Sep 17 00:00:00 2001
|
||
|
From: Lennart Poettering <lennart@poettering.net>
|
||
|
Date: Fri, 20 Jun 2014 16:58:21 +0200
|
||
|
Subject: [PATCH] core: clean-up signal reset logic when reexec
|
||
|
|
||
|
There's no need to save the old sigmask, if we are going to die. Let's
|
||
|
simplify this. Also, reset all the signal handlers, so that we don't
|
||
|
leave SIG_IGN set for some of them across reexec.
|
||
|
---
|
||
|
src/core/main.c | 10 +++++-----
|
||
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
||
|
|
||
|
diff --git src/core/main.c src/core/main.c
|
||
|
index 863ba52..6981e72 100644
|
||
|
--- src/core/main.c
|
||
|
+++ src/core/main.c
|
||
|
@@ -1824,7 +1824,7 @@ finish:
|
||
|
if (reexecute) {
|
||
|
const char **args;
|
||
|
unsigned i, args_size;
|
||
|
- sigset_t ss, o_ss;
|
||
|
+ sigset_t ss;
|
||
|
|
||
|
/* Close and disarm the watchdog, so that the new
|
||
|
* instance can reinitialize it, but doesn't get
|
||
|
@@ -1910,8 +1910,10 @@ finish:
|
||
|
|
||
|
/* reenable any blocked signals, especially important
|
||
|
* if we switch from initial ramdisk to init=... */
|
||
|
- sigemptyset(&ss);
|
||
|
- sigprocmask(SIG_SETMASK, &ss, &o_ss);
|
||
|
+ reset_all_signal_handlers();
|
||
|
+
|
||
|
+ assert_se(sigemptyset(&ss) == 0);
|
||
|
+ assert_se(sigprocmask(SIG_SETMASK, &ss, NULL) == 0);
|
||
|
|
||
|
if (switch_root_init) {
|
||
|
args[0] = switch_root_init;
|
||
|
@@ -1931,8 +1933,6 @@ finish:
|
||
|
log_error("Failed to execute /bin/sh, giving up: %m");
|
||
|
} else
|
||
|
log_warning("Failed to execute /sbin/init, giving up: %m");
|
||
|
-
|
||
|
- sigprocmask(SIG_SETMASK, &o_ss, NULL);
|
||
|
}
|
||
|
|
||
|
if (arg_serialization) {
|
||
|
--
|
||
|
1.7.9.2
|
||
|
|