tree-wide: set SA_RESTART for signal handlers we install
We already set it in most cases, but make sure to set it in all others too, and document that that's a good idea.
This commit is contained in:
parent
7b4318b6a5
commit
e28c7cd066
|
@ -429,3 +429,8 @@
|
||||||
and Linux/GNU-specific APIs, we generally prefer the POSIX APIs. If there
|
and Linux/GNU-specific APIs, we generally prefer the POSIX APIs. If there
|
||||||
aren't, we are happy to use GNU or Linux APIs, and expect non-GNU
|
aren't, we are happy to use GNU or Linux APIs, and expect non-GNU
|
||||||
implementations of libc to catch up with glibc.
|
implementations of libc to catch up with glibc.
|
||||||
|
|
||||||
|
- Whenever installing a signal handler, make sure to set SA_RESTART for it, so
|
||||||
|
that interrupted system calls are automatically restarted, and we minimize
|
||||||
|
hassles with handling EINTR (in particular as EINTR handling is pretty broken
|
||||||
|
on Linux).
|
||||||
|
|
|
@ -339,7 +339,7 @@ static void sigchld_hdl(int sig) {
|
||||||
|
|
||||||
static int install_chld_handler(void) {
|
static int install_chld_handler(void) {
|
||||||
static const struct sigaction act = {
|
static const struct sigaction act = {
|
||||||
.sa_flags = SA_NOCLDSTOP,
|
.sa_flags = SA_NOCLDSTOP|SA_RESTART,
|
||||||
.sa_handler = sigchld_hdl,
|
.sa_handler = sigchld_hdl,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3632,7 +3632,7 @@ static int run(int master,
|
||||||
|
|
||||||
static const struct sigaction sa = {
|
static const struct sigaction sa = {
|
||||||
.sa_handler = nop_signal_handler,
|
.sa_handler = nop_signal_handler,
|
||||||
.sa_flags = SA_NOCLDSTOP,
|
.sa_flags = SA_NOCLDSTOP|SA_RESTART,
|
||||||
};
|
};
|
||||||
|
|
||||||
_cleanup_release_lock_file_ LockFile uid_shift_lock = LOCK_FILE_INIT;
|
_cleanup_release_lock_file_ LockFile uid_shift_lock = LOCK_FILE_INIT;
|
||||||
|
|
|
@ -143,7 +143,7 @@ static int adm_monitor(struct udev *udev, int argc, char *argv[]) {
|
||||||
|
|
||||||
/* set signal handlers */
|
/* set signal handlers */
|
||||||
act.sa_handler = sig_handler;
|
act.sa_handler = sig_handler;
|
||||||
act.sa_flags = SA_RESTART;
|
act.sa_flags = SA_RESTART|SA_RESTART;
|
||||||
sigaction(SIGINT, &act, NULL);
|
sigaction(SIGINT, &act, NULL);
|
||||||
sigaction(SIGTERM, &act, NULL);
|
sigaction(SIGTERM, &act, NULL);
|
||||||
sigemptyset(&mask);
|
sigemptyset(&mask);
|
||||||
|
|
Loading…
Reference in New Issue