mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-16 22:05:21 -05:00
wayland: prevent hang when terminating due to broken Wayland connection
If the call to fdm_wayl() with EPOLLHUP was followed by calls to wayl_roundtrip(), foot would hang. The reason for this is that the EPOLLHUP handler in fdm_wayl() would call wl_display_cancel_read(). wayl_roundtrip() also calls wl_display_cancel_read() (since we normally have called wl_display_prepare_read()), before calling wl_display_roundtrip(). When calling wl_display_cancel_read() two times in a row, without a wl_display_prepare_read() in between, wl_display_roundtrip() hangs. Fix by not calling wl_display_cancel_read() in fdm_wayl(). This ensures our invariant holds: wl_display_prepare_read() is *always* in effect outside of fdm_wayl(). Closes #651
This commit is contained in:
parent
51250c64cc
commit
bcd28311f4
2 changed files with 11 additions and 1 deletions
|
|
@ -48,6 +48,8 @@
|
||||||
* Crash in scrollback search mode when selection has been canceled due
|
* Crash in scrollback search mode when selection has been canceled due
|
||||||
to terminal content updates
|
to terminal content updates
|
||||||
(https://codeberg.org/dnkl/foot/issues/644).
|
(https://codeberg.org/dnkl/foot/issues/644).
|
||||||
|
* Foot process not terminating when the Wayland connection is broken
|
||||||
|
(https://codeberg.org/dnkl/foot/issues/651).
|
||||||
|
|
||||||
|
|
||||||
### Security
|
### Security
|
||||||
|
|
|
||||||
10
wayland.c
10
wayland.c
|
|
@ -1163,7 +1163,15 @@ fdm_wayl(struct fdm *fdm, int fd, int events, void *data)
|
||||||
|
|
||||||
if (events & EPOLLHUP) {
|
if (events & EPOLLHUP) {
|
||||||
LOG_WARN("disconnected from Wayland");
|
LOG_WARN("disconnected from Wayland");
|
||||||
wl_display_cancel_read(wayl->display);
|
/*
|
||||||
|
* Do *not* call wl_display_cancel_read() here.
|
||||||
|
*
|
||||||
|
* Doing so causes later calls to wayl_roundtrip() (called
|
||||||
|
* from term_destroy() -> wayl_win_destroy()) to hang
|
||||||
|
* indefinitely.
|
||||||
|
*
|
||||||
|
* https://codeberg.org/dnkl/foot/issues/651
|
||||||
|
*/
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue