summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarius Vlad <marius.vlad@collabora.com>2022-12-12 21:02:19 +0200
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2022-12-14 13:31:19 +0000
commit76fa1b83638310c23bf3ca952e4479499b8ecb43 (patch)
treeb0e9b723f19cf957fa4b9935bad65e75015ddd38
parent79eac214d4866d840767b6a430c6168e55a214c0 (diff)
src: Verify if the output is present
The output destroy handler will invalidate the weston output and with it we're no longer have access to it when the shell client closes up. This checks against the weston output to avoid an illegal memory access. Still part of the hot-plug connector fixes. Bug-AGL: SPEC-4625 Signed-off-by: Marius Vlad <marius.vlad@collabora.com> Reported-by: Detlev Casanova <detlev.casanova@collabora.com> Change-Id: Ic4c389422057fa082aff7fdbbc13af0c16f7bbb6
-rw-r--r--src/desktop.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/desktop.c b/src/desktop.c
index dfcc24d..0f1da18 100644
--- a/src/desktop.c
+++ b/src/desktop.c
@@ -289,8 +289,9 @@ desktop_surface_removed(struct weston_desktop_surface *dsurface, void *userdata)
* the DESKTOP role can happen here as well, because we can fall-back
* to that when we try to determine the role type. Application that
* do not set the app_id will be land here, when destroyed */
- if (output == NULL && (surface->role == IVI_SURFACE_ROLE_NONE ||
- surface->role == IVI_SURFACE_ROLE_DESKTOP))
+ if ((output == NULL && (surface->role == IVI_SURFACE_ROLE_NONE ||
+ surface->role == IVI_SURFACE_ROLE_DESKTOP)) ||
+ output->output == NULL)
goto skip_output_asignment;
assert(output != NULL);
@@ -366,7 +367,7 @@ skip_output_asignment:
weston_log("Removed surface %p, app_id %s, role %s\n", surface,
app_id, ivi_layout_get_surface_role_name(surface));
- if (app_id && output) {
+ if (app_id && output && output->output) {
shell_advertise_app_state(output->ivi, app_id,
NULL, AGL_SHELL_DESKTOP_APP_STATE_DESTROYED);
if (output->ivi->shell_client.ready)