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 XWAYLANDsiginfo_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);#elsewhile (waitpid(-1, NULL, WNOHANG) > 0);#endif}void
}voidsigchld(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);