From 26504f9a6f93e5b14819d5ed84dd27d3fbb41f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leonardo=20Hern=C3=A1ndez=20Hern=C3=A1ndez?= Date: Thu, 26 Dec 2024 20:18:51 -0600 Subject: [PATCH] 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 --- dwl.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/dwl.c b/dwl.c index 05e1975..ea66483 100644 --- a/dwl.c +++ b/dwl.c @@ -1486,22 +1486,10 @@ 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