diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/util.c | 18 | ||||
-rw-r--r-- | src/shared/util.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/shared/util.c b/src/shared/util.c index 4af2d3ceba..98c07163da 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -959,6 +959,18 @@ int reset_all_signal_handlers(void) { return r; } +int reset_signal_mask(void) { + sigset_t ss; + + if (sigemptyset(&ss) < 0) + return -errno; + + if (sigprocmask(SIG_SETMASK, &ss, NULL) < 0) + return -errno; + + return 0; +} + char *strstrip(char *s) { char *e; @@ -5131,6 +5143,12 @@ int fork_agent(pid_t *pid, const int except[], unsigned n_except, const char *pa /* Don't leak fds to the agent */ close_all_fds(except, n_except); + /* Make sure we actually can kill the agent, if we need to, in + * case somebody invoked us from a shell script that trapped + * SIGTERM or so... */ + reset_all_signal_handlers(); + reset_signal_mask(); + stdout_is_tty = isatty(STDOUT_FILENO); stderr_is_tty = isatty(STDERR_FILENO); diff --git a/src/shared/util.h b/src/shared/util.h index cd947dbbef..ea87c96956 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -274,6 +274,7 @@ int readlink_and_make_absolute(const char *p, char **r); int readlink_and_canonicalize(const char *p, char **r); int reset_all_signal_handlers(void); +int reset_signal_mask(void); char *strstrip(char *s); char *delete_chars(char *s, const char *bad); |