desktop-shell: avoid crashes when a surface disappears during resize

The desktop_surface object is destroyed first so it can happen that the shsurf
still exists but desktop_surface is already NULL. So expand the check to make
sure the desktop_surface is still available in the resize callbacks.

Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
(cherry picked from commit 06365e602bd7599760a9a1414d12d6c26ca9c445)
dev
Michael Olbrich 2 years ago committed by Marius Vlad
parent 5ad870f505
commit ff13a90eea
  1. 6
      desktop-shell/shell.c

@ -1153,7 +1153,7 @@ resize_grab_motion(struct weston_pointer_grab *grab,
weston_pointer_move(pointer, event); weston_pointer_move(pointer, event);
if (!shsurf) if (!shsurf || !shsurf->desktop_surface)
return; return;
weston_view_from_global_fixed(shsurf->view, weston_view_from_global_fixed(shsurf->view,
@ -1204,7 +1204,7 @@ resize_grab_button(struct weston_pointer_grab *grab,
if (pointer->button_count == 0 && if (pointer->button_count == 0 &&
state == WL_POINTER_BUTTON_STATE_RELEASED) { state == WL_POINTER_BUTTON_STATE_RELEASED) {
if (resize->base.shsurf != NULL) { if (resize->base.shsurf && resize->base.shsurf->desktop_surface) {
struct weston_desktop_surface *desktop_surface = struct weston_desktop_surface *desktop_surface =
resize->base.shsurf->desktop_surface; resize->base.shsurf->desktop_surface;
weston_desktop_surface_set_resizing(desktop_surface, weston_desktop_surface_set_resizing(desktop_surface,
@ -1222,7 +1222,7 @@ resize_grab_cancel(struct weston_pointer_grab *grab)
{ {
struct weston_resize_grab *resize = (struct weston_resize_grab *) grab; struct weston_resize_grab *resize = (struct weston_resize_grab *) grab;
if (resize->base.shsurf != NULL) { if (resize->base.shsurf && resize->base.shsurf->desktop_surface) {
struct weston_desktop_surface *desktop_surface = struct weston_desktop_surface *desktop_surface =
resize->base.shsurf->desktop_surface; resize->base.shsurf->desktop_surface;
weston_desktop_surface_set_resizing(desktop_surface, false); weston_desktop_surface_set_resizing(desktop_surface, false);

Loading…
Cancel
Save