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)
This commit is contained in:
committed by
Marius Vlad
parent
5ad870f505
commit
ff13a90eea
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user