mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-02 11:55:59 +01:00
xwayland: Clean up if Xwayland fails to start
When running wlroots compositors with Xwayland executable bits unset, if DISPLAY is set to the display number wlroots has set up, then X and gtk clients (at least) hang when they are ran. X clients should fail with an error and exit while gtk clients should fall back to wayland backend and run correctly. This is because wlroots opened sockets for Xwayland but wasn't closing them if Xwayland failed to start.
This commit is contained in:
parent
a7b538008b
commit
a9b1d9e838
1 changed files with 10 additions and 4 deletions
|
@ -219,18 +219,17 @@ static int xserver_handle_ready(int signal_number, void *data) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
wlr_log_errno(WLR_ERROR, "waitpid for Xwayland fork failed");
|
wlr_log_errno(WLR_ERROR, "waitpid for Xwayland fork failed");
|
||||||
return 1;
|
goto error;
|
||||||
}
|
}
|
||||||
if (stat_val) {
|
if (stat_val) {
|
||||||
wlr_log(WLR_ERROR, "Xwayland startup failed, not setting up xwm");
|
wlr_log(WLR_ERROR, "Xwayland startup failed, not setting up xwm");
|
||||||
return 1;
|
goto error;
|
||||||
}
|
}
|
||||||
wlr_log(WLR_DEBUG, "Xserver is ready");
|
wlr_log(WLR_DEBUG, "Xserver is ready");
|
||||||
|
|
||||||
wlr_xwayland->xwm = xwm_create(wlr_xwayland);
|
wlr_xwayland->xwm = xwm_create(wlr_xwayland);
|
||||||
if (!wlr_xwayland->xwm) {
|
if (!wlr_xwayland->xwm) {
|
||||||
xwayland_finish_server(wlr_xwayland);
|
goto error;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wlr_xwayland->seat) {
|
if (wlr_xwayland->seat) {
|
||||||
|
@ -254,6 +253,13 @@ static int xserver_handle_ready(int signal_number, void *data) {
|
||||||
wl_signal_init(&wlr_xwayland->events.ready);
|
wl_signal_init(&wlr_xwayland->events.ready);
|
||||||
|
|
||||||
return 1; /* wayland event loop dispatcher's count */
|
return 1; /* wayland event loop dispatcher's count */
|
||||||
|
error:
|
||||||
|
/* clean up */
|
||||||
|
wlr_xwayland_set_seat(wlr_xwayland, NULL);
|
||||||
|
xwayland_finish_server(wlr_xwayland);
|
||||||
|
xwayland_finish_display(wlr_xwayland);
|
||||||
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int xwayland_socket_connected(int fd, uint32_t mask, void* data){
|
static int xwayland_socket_connected(int fd, uint32_t mask, void* data){
|
||||||
|
|
Loading…
Reference in a new issue