It added complexity, especially with the differences in behavior between handled and ignored signals across an exec().
EK6VCEIAKFHDTJOI7PEEIUZ2BO5AYS4FFOOYC3UNLZSHLJBD5W3AC
IGUCE4TWLVFU246TXOUF5R4YX2W4DOHDFMZO2AHRWL7PVDABEEIAC
XF2LUZ7CQT44LC4F2L3UAY5TSMWQTKA5XBMMQPKRGSWE6MGCEYIAC
ED2SMDT7CMXQVCLUGKMHVUHJEHTBHNQILVYXM3R3DUXTNVGGM63QC
DK5O6CLOTUA6SHGCEGPQU2XQIPJ5V6TW3T3E3YBQ3AHXKUQWKZ2AC
6XZIQSMIVP2GZ5S3UCKEVNDSLTHSQEVSXLV4UIFF3G3SRCGJPXYAC
S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
NBXXOEK7Y2B5NUYQTJXEYKKMXV26KXGBRUOPPFC5SJUFBLKZZAMQC
OPMH4TJKAIMPP5NJDKHP3U3WZILNCOMDBTEBKFON4AHOVS7HEVTQC
EQRGODLKSVSPFSUZU7BV5ER72U4QS4ATSBKV544XXQVKKTOSC7EAC
HGITBD7RZVPMWWPLFXDXW53LO5MWD4RVS77ZBFLORUIJMJ35IVDQC
struct sigaction sa_term = {.sa_flags = SA_RESTART, .sa_handler = quitsignal};
struct sigaction sa_sigchld = {
#ifdef XWAYLAND
.sa_flags = SA_RESTART,
.sa_handler = sigchld,
#else
.sa_flags = SA_NOCLDSTOP | SA_NOCLDWAIT | SA_RESTART,
.sa_handler = SIG_IGN,
#endif
};
sigemptyset(&sa_term.sa_mask);
sigemptyset(&sa_sigchld.sa_mask);
/* Set up signal handlers */
struct sigaction sa = {.sa_flags = SA_RESTART, .sa_handler = sigchld};
sigemptyset(&sa.sa_mask);
sigaction(SIGCHLD, &sa, NULL);
sa.sa_handler = quitsignal;
sigaction(SIGINT, &sa, NULL);
sigaction(SIGTERM, &sa, NULL);
sigchld(int unused)
{
#ifdef XWAYLAND
siginfo_t in;
/* We should be able to remove this function in favor of a simple
* struct sigaction sa = {.sa_handler = SIG_IGN};
* sigaction(SIGCHLD, &sa, NULL);
* but the Xwayland implementation in wlroots currently prevents us from
* setting our own disposition for SIGCHLD.
*/
/* WNOWAIT leaves the child in a waitable state, in case this is the
* XWayland process
*/
while (!waitid(P_ALL, 0, &in, WEXITED|WNOHANG|WNOWAIT) && in.si_pid
&& (!xwayland || in.si_pid != xwayland->server->pid))
waitpid(in.si_pid, NULL, 0);
#else
while (waitpid(-1, NULL, WNOHANG) > 0);
#endif
}
void
}
void
sigchld(int unused)
{
siginfo_t in;
/* We should be able to remove this function in favor of a simple
* struct sigaction sa = {.sa_handler = SIG_IGN};
* sigaction(SIGCHLD, &sa, NULL);
* but the Xwayland implementation in wlroots currently prevents us from
* setting our own disposition for SIGCHLD.
*/
/* WNOWAIT leaves the child in a waitable state, in case this is the
* XWayland process
*/
while (!waitid(P_ALL, 0, &in, WEXITED|WNOHANG|WNOWAIT) && in.si_pid
&& (!xwayland || in.si_pid != xwayland->server->pid))
waitpid(in.si_pid, NULL, 0);