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,22 +1486,10 @@ gpureset(struct wl_listener *listener, void *data)
|
||||||
void
|
void
|
||||||
handlesig(int signo)
|
handlesig(int signo)
|
||||||
{
|
{
|
||||||
if (signo == SIGCHLD) {
|
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
|
|
||||||
while (waitpid(-1, NULL, WNOHANG) > 0);
|
while (waitpid(-1, NULL, WNOHANG) > 0);
|
||||||
#endif
|
else if (signo == SIGINT || signo == SIGTERM)
|
||||||
} else if (signo == SIGINT || signo == SIGTERM) {
|
|
||||||
quit(NULL);
|
quit(NULL);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in a new issue