e_process: add callback for E_CLIENT_HOOK_DEL 49/239849/1 accepted/tizen/unified/20200730.130817 submit/tizen/20200730.084930
authorDoyoun Kang <doyoun.kang@samsung.com>
Thu, 30 Jul 2020 07:09:24 +0000 (16:09 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Thu, 30 Jul 2020 07:09:27 +0000 (16:09 +0900)
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

index f5f45b65bbc4bac12404665f96d2370a39c7faf3..bfa63453ccefbceb6f95bf938eda90c3187ddeef 100644 (file)
@@ -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;