xwayland: Clean up the WM properly if X server crashes

The X cleanup code uses wxs->wm to check if the WM has been created - but that
variable was never initialized. So if X crashes, the WM doesn't get destroyed,
causing a crash when it tries to repaint a window.

Signed-off-by: Dima Ryazanov <dima@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
dev
Dima Ryazanov 10 years ago committed by Pekka Paalanen
parent 68c83cae24
commit 434cc23426
  1. 6
      xwayland/launcher.c

@ -43,7 +43,7 @@ handle_sigusr1(int signal_number, void *data)
/* We'd be safer if we actually had the struct /* We'd be safer if we actually had the struct
* signalfd_siginfo from the signalfd data and could verify * signalfd_siginfo from the signalfd data and could verify
* this came from Xwayland.*/ * this came from Xwayland.*/
weston_wm_create(wxs, wxs->wm_fd); wxs->wm = weston_wm_create(wxs, wxs->wm_fd);
wl_event_source_remove(wxs->sigusr1_source); wl_event_source_remove(wxs->sigusr1_source);
return 1; return 1;
@ -163,8 +163,10 @@ weston_xserver_shutdown(struct weston_xserver *wxs)
} }
close(wxs->abstract_fd); close(wxs->abstract_fd);
close(wxs->unix_fd); close(wxs->unix_fd);
if (wxs->wm) if (wxs->wm) {
weston_wm_destroy(wxs->wm); weston_wm_destroy(wxs->wm);
wxs->wm = NULL;
}
wxs->loop = NULL; wxs->loop = NULL;
} }

Loading…
Cancel
Save