1*4882a593SmuzhiyunFrom 0464abb571f35d7086222b007dd5f1a2303b2f32 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Tue, 12 Jul 2022 12:29:57 +0800 4*4882a593SmuzhiyunSubject: [PATCH 05/10] xdg-shell{,-v6}: Fix crash when unbind early 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 7*4882a593Smuzhiyun--- 8*4882a593Smuzhiyun src/modules/wl_desktop_shell/xdg.c | 7 +++++-- 9*4882a593Smuzhiyun src/modules/wl_desktop_shell/xdg6.c | 7 +++++-- 10*4882a593Smuzhiyun 2 files changed, 10 insertions(+), 4 deletions(-) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyundiff --git a/src/modules/wl_desktop_shell/xdg.c b/src/modules/wl_desktop_shell/xdg.c 13*4882a593Smuzhiyunindex 4892eaa70..0f8c973ec 100644 14*4882a593Smuzhiyun--- a/src/modules/wl_desktop_shell/xdg.c 15*4882a593Smuzhiyun+++ b/src/modules/wl_desktop_shell/xdg.c 16*4882a593Smuzhiyun@@ -1454,8 +1454,11 @@ _xdg_client_destroy(E_Client *ec, Eina_Bool do_list) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun client = wl_resource_get_client(ec->comp_data->surface); 19*4882a593Smuzhiyun res = eina_hash_find(xdg_shell_resources, &client); 20*4882a593Smuzhiyun- v = wl_resource_get_user_data(res); 21*4882a593Smuzhiyun- v->surfaces = eina_list_remove(v->surfaces, shd->surface); 22*4882a593Smuzhiyun+ if (res) 23*4882a593Smuzhiyun+ { 24*4882a593Smuzhiyun+ v = wl_resource_get_user_data(res); 25*4882a593Smuzhiyun+ v->surfaces = eina_list_remove(v->surfaces, shd->surface); 26*4882a593Smuzhiyun+ } 27*4882a593Smuzhiyun } 28*4882a593Smuzhiyun if (ec->comp_data->shell.surface) 29*4882a593Smuzhiyun e_shell_surface_destroy(ec->comp_data->shell.surface); 30*4882a593Smuzhiyundiff --git a/src/modules/wl_desktop_shell/xdg6.c b/src/modules/wl_desktop_shell/xdg6.c 31*4882a593Smuzhiyunindex ce236023e..a4a85251c 100644 32*4882a593Smuzhiyun--- a/src/modules/wl_desktop_shell/xdg6.c 33*4882a593Smuzhiyun+++ b/src/modules/wl_desktop_shell/xdg6.c 34*4882a593Smuzhiyun@@ -1429,8 +1429,11 @@ _xdg6_client_destroy(E_Client *ec, Eina_Bool do_list) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun client = wl_resource_get_client(ec->comp_data->surface); 37*4882a593Smuzhiyun res = eina_hash_find(xdg_shell_resources, &client); 38*4882a593Smuzhiyun- v = wl_resource_get_user_data(res); 39*4882a593Smuzhiyun- v->surfaces = eina_list_remove(v->surfaces, shd->surface); 40*4882a593Smuzhiyun+ if (res) 41*4882a593Smuzhiyun+ { 42*4882a593Smuzhiyun+ v = wl_resource_get_user_data(res); 43*4882a593Smuzhiyun+ v->surfaces = eina_list_remove(v->surfaces, shd->surface); 44*4882a593Smuzhiyun+ } 45*4882a593Smuzhiyun } 46*4882a593Smuzhiyun if (ec->comp_data->shell.surface) 47*4882a593Smuzhiyun e_shell_surface_destroy(ec->comp_data->shell.surface); 48*4882a593Smuzhiyun-- 49*4882a593Smuzhiyun2.20.1 50*4882a593Smuzhiyun 51