From 63e68b42bd06bebfc0881a3e4e0652b1341546a4 Mon Sep 17 00:00:00 2001 From: Doyoun Kang Date: Thu, 30 Jul 2020 16:09:24 +0900 Subject: [PATCH] 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 --- src/bin/e_process.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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; -- 2.34.1