From: Doyoun Kang Date: Thu, 30 Jul 2020 07:09:24 +0000 (+0900) Subject: e_process: add callback for E_CLIENT_HOOK_DEL X-Git-Tag: submit/tizen/20200730.084930^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=63e68b42bd06bebfc0881a3e4e0652b1341546a4;p=platform%2Fupstream%2Fenlightenment.git e_process: add callback for E_CLIENT_HOOK_DEL There was a potential issue for removing e_process info. When e doesn't send E_EVENT_CLIENT_REMOVE event, then e_process didn't remove ec from the ec_list. In this case, e could work invalid. Change-Id: I04974cb4660b0fc4b1beff82aea104da7135907c --- diff --git a/src/bin/e_process.c b/src/bin/e_process.c index f5f45b65bb..bfa63453cc 100644 --- a/src/bin/e_process.c +++ b/src/bin/e_process.c @@ -367,6 +367,26 @@ _e_process_cb_hook_visibility(void *d EINA_UNUSED, E_Client *ec) } } +static void +_e_process_cb_hook_client_del(void *d EINA_UNUSED, E_Client *ec) +{ + Eina_Bool force_remove = EINA_TRUE; + + if ((!ec->new_client) && (!stopping)) + force_remove = EINA_FALSE; + else + { + if (stopping) + force_remove = EINA_FALSE; + } + + if (force_remove) + { + ELOGF("PROCESS", "Delete ec from e_process by hook_del.", ec); + _e_process_client_info_del(ec); + } +} + static Eina_Bool _e_process_windows_visible_get(pid_t pid, Eina_Bool *visible) { @@ -617,6 +637,9 @@ e_process_init(void) hook = e_client_hook_add(E_CLIENT_HOOK_EVAL_VISIBILITY, _e_process_cb_hook_visibility, NULL); if (hook) _e_process_ec_hooks = eina_list_append(_e_process_ec_hooks, hook); + hook = e_client_hook_add(E_CLIENT_HOOK_DEL, _e_process_cb_hook_client_del, NULL); + if (hook) _e_process_ec_hooks = eina_list_append(_e_process_ec_hooks, hook); + _e_process_manager = e_pm; return EINA_TRUE;