mirror of
https://github.com/clearlinux/systemd-stable.git
synced 2026-10-03 23:38:39 +00:00
reset signal handlers on startup
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include "macro.h"
|
||||
#include "strv.h"
|
||||
#include "log.h"
|
||||
#include "util.h"
|
||||
|
||||
Manager* manager_new(void) {
|
||||
Manager *m;
|
||||
@@ -41,6 +42,8 @@ Manager* manager_new(void) {
|
||||
if ((m->epoll_fd = epoll_create1(EPOLL_CLOEXEC)) < 0)
|
||||
goto fail;
|
||||
|
||||
assert_se(reset_all_signal_handlers() == 0);
|
||||
|
||||
assert_se(sigemptyset(&mask) == 0);
|
||||
assert_se(sigaddset(&mask, SIGCHLD) == 0);
|
||||
assert_se(sigaddset(&mask, SIGINT) == 0);
|
||||
|
||||
@@ -468,3 +468,25 @@ char *path_make_absolute(const char *p, const char *prefix) {
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
int reset_all_signal_handlers(void) {
|
||||
int sig;
|
||||
|
||||
for (sig = 1; sig < _NSIG; sig++) {
|
||||
struct sigaction sa;
|
||||
|
||||
if (sig == SIGKILL || sig == SIGSTOP)
|
||||
continue;
|
||||
|
||||
zero(sa);
|
||||
sa.sa_handler = SIG_DFL;
|
||||
|
||||
/* On Linux the first two RT signals are reserved by
|
||||
* glibc, and sigaction() will return EINVAL for them. */
|
||||
if ((sigaction(sig, &sa, NULL) < 0))
|
||||
if (errno != EINVAL)
|
||||
return -errno;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user