mirror of
https://codeberg.org/dwl/dwl.git
synced 2025-01-24 09:47:28 -08:00
do not call waitid(2) in the signal handler when Xwayland is enabled
waitid(2) is not a async-signal-safe function acording to signal-safety(7) We can stop doing this because wlroots!4926 allows compositors to install signal handlers for SIGCHLD. References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4926
This commit is contained in:
parent
6f34a6d3a6
commit
26504f9a6f
1 changed files with 2 additions and 14 deletions
16
dwl.c
16
dwl.c
|
@ -1486,23 +1486,11 @@ gpureset(struct wl_listener *listener, void *data)
|
|||
void
|
||||
handlesig(int signo)
|
||||
{
|
||||
if (signo == SIGCHLD) {
|
||||
#ifdef XWAYLAND
|
||||
siginfo_t in;
|
||||
/* wlroots expects to reap the XWayland process itself, so we
|
||||
* use WNOWAIT to keep the child waitable until we know it's not
|
||||
* XWayland.
|
||||
*/
|
||||
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
|
||||
if (signo == SIGCHLD)
|
||||
while (waitpid(-1, NULL, WNOHANG) > 0);
|
||||
#endif
|
||||
} else if (signo == SIGINT || signo == SIGTERM) {
|
||||
else if (signo == SIGINT || signo == SIGTERM)
|
||||
quit(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
incnmaster(const Arg *arg)
|
||||
|
|
Loading…
Reference in a new issue