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:
Leonardo Hernández Hernández 2024-12-26 20:18:51 -06:00
parent 6f34a6d3a6
commit 26504f9a6f
No known key found for this signature in database
GPG key ID: E538897EE11B9624

16
dwl.c
View file

@ -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