Re-add SA_RESTART to mysignal.

This makes mysignal implement reliable BSD semantics according to
Stevens' APUE.  This was first attempted in 2001 but was reverted
due to problems with HP-UX 10.20 and select() and possibly grantpt().
Modern systems should be fine with it, but if any current platforms have
a problem with it now we can disable it just for those.  ok djm@
This commit is contained in:
Darren Tucker 2019-10-11 14:12:16 +11:00
parent 0bd312a362
commit 9b9e3ca694
1 changed files with 6 additions and 1 deletions

View File

@ -37,10 +37,15 @@ mysignal(int sig, mysig_t act)
memset(&sa, 0, sizeof(sa));
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
if (sig == SIGALRM) {
#ifdef SA_INTERRUPT
if (sig == SIGALRM)
sa.sa_flags |= SA_INTERRUPT;
#endif
} else {
#ifdef SA_RESTART
sa.sa_flags |= SA_RESTART;
#endif
}
sa.sa_handler = act;
if (sigaction(sig, &sa, NULL) == -1)
return (mysig_t) -1;