From: Walter Lozano Date: Fri, 13 Nov 2020 14:46:08 +0000 (+0000) Subject: desktop: Allow to remove surface from pending list X-Git-Tag: 10.91.0~4 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=7239ababba46f5ca3bddd0add65acd5777e832d8;p=src%2Fagl-compositor.git desktop: Allow to remove surface from pending list In some special corner cases a surface can be removed while it is still in the pending list. An example of this case is when a surface is added and removed before the system is ready. Under this circumstances the surface still has role == ROLE_NONE and is in the pending list. The fact of not removing the surface from the pending_list ends in a segfault when the system is ready. In order to fix the issue, remove the restriction to only remove surfaces with role != ROLE_NONE. Signed-off-by: Walter Lozano Change-Id: Ia71b6c3ca214849448c935cc09039581d0e209a8 --- diff --git a/src/desktop.c b/src/desktop.c index f7d11b1..7127c2d 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -96,6 +96,7 @@ desktop_surface_added(struct weston_desktop_surface *dsurface, void *userdata) surface->activated_by_default = false; surface->advertised_on_launch = false; surface->checked_pending = false; + wl_list_init(&surface->link); wl_signal_init(&surface->signal_advertise_app); @@ -238,9 +239,7 @@ skip_output_asignment: weston_desktop_surface_get_app_id(dsurface), ivi_layout_get_surface_role_name(surface)); - /* we weren't added to any list if we are still with 'none' as role */ - if (surface->role != IVI_SURFACE_ROLE_NONE) - wl_list_remove(&surface->link); + wl_list_remove(&surface->link); free(surface); }