e_service_launcher: fix the dangling launcher in launchee_hash 87/235687/2
authorDuna Oh <duna.oh@samsung.com>
Tue, 9 Jun 2020 02:18:00 +0000 (11:18 +0900)
committerDuna Oh <duna.oh@samsung.com>
Tue, 9 Jun 2020 04:18:08 +0000 (13:18 +0900)
The launchee_hash contains a key(launchee client) and a data(launcher).
When launchee client is deleted, the key and the data should be deleted from launchee_hash.

Change-Id: I34d634217786e9dd358e1eec984f9ae4a12df9e1

src/bin/services/e_service_launcher.c

index 04dd7695e1f8f1b4869a238416bc3c5c14b889bc..f1b9fef154c22d7930cfd850b55728f4071ad0c3 100644 (file)
@@ -1598,7 +1598,7 @@ _launcher_handler_launchee_del(E_Client *ec)
    lc = eina_hash_find(_laundler->launchee_hash, &ec);
 
    if (lc)
-     ret = eina_hash_del(_laundler->launchee_hash, &lc->launched_ec, lc);
+     ret = eina_hash_del(_laundler->launchee_hash, &ec, lc);
 
    if (ret)
      _laundler->launchee_count--;
@@ -2006,15 +2006,23 @@ _launcher_handler_cb_hook_client_del(void *data EINA_UNUSED, E_Client *ec)
    EINA_SAFETY_ON_NULL_RETURN(ec);
 
    lc = _launcher_handler_launcher_find(ec);
-   EINA_SAFETY_ON_NULL_RETURN(lc);
-
-   if (lc->ec == ec) //launcher surface is gone.
+   if (lc && lc->ec == ec) //launcher surface is gone.
      {
+        ELOGF("LAUNCHER_SRV", "Hook Client Del. launcher client was gone. lc:%p, launched_ec:%p, target.ec:%p", ec, lc, lc->launched_ec, lc->target.ec);
         _launcher_handler_launchee_del(ec);
         _launcher_handler_launcher_del(lc);
         _launcher_data_reset(lc);
         E_FREE(lc);
      }
+   else
+     {
+        lc = _launcher_handler_launcher_find_with_launchee(ec);
+        if (lc)
+          {
+             ELOGF("LAUNCHER_SRV", "Hook Client Del. launchee client was gone. lc:%p, launched_ec:%p, target.ec:%p", ec, lc, lc->launched_ec, lc->target.ec);
+             _launcher_handler_launchee_del(ec);
+          }
+     }
 }
 
 static Eina_Bool