summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2023-02-16 17:54:22 +0100
committerMarius Vlad <marius.vlad@collabora.com>2023-05-16 10:52:31 +0300
commitff13a90eea0e73ad96fcad4ce2e0e1d781465d06 (patch)
tree063c958e0527e80ada132a63c5054f1baf7ee003
parent5ad870f505f8592b26c14a28aa2987cbe0552cd8 (diff)
downloadweston-ff13a90eea0e73ad96fcad4ce2e0e1d781465d06.tar.gz
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)
-rw-r--r--desktop-shell/shell.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index d13d12ff..e4ea90f9 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -1153,7 +1153,7 @@ resize_grab_motion(struct weston_pointer_grab *grab,
weston_pointer_move(pointer, event);
- if (!shsurf)
+ if (!shsurf || !shsurf->desktop_surface)
return;
weston_view_from_global_fixed(shsurf->view,
@@ -1204,7 +1204,7 @@ resize_grab_button(struct weston_pointer_grab *grab,
if (pointer->button_count == 0 &&
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 =
resize->base.shsurf->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;
- if (resize->base.shsurf != NULL) {
+ if (resize->base.shsurf && resize->base.shsurf->desktop_surface) {
struct weston_desktop_surface *desktop_surface =
resize->base.shsurf->desktop_surface;
weston_desktop_surface_set_resizing(desktop_surface, false);