From: Junseok, Kim Date: Tue, 27 Oct 2020 07:34:26 +0000 (+0900) Subject: e_appinfo: remove duplicated E_Appinfo when pid/appid set X-Git-Tag: submit/tizen/20201028.110311~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=33d19a76c50b6e4dff2594b233bddf7b1b05fed6;p=platform%2Fupstream%2Fenlightenment.git e_appinfo: remove duplicated E_Appinfo when pid/appid set Change-Id: I5b2f2e20dcf566a54e4f25532ededdf8cbb19e8e Signed-off-by: Junseok, Kim --- diff --git a/src/bin/e_appinfo.c b/src/bin/e_appinfo.c index 10e7c6b2e4..4ba6c290d6 100644 --- a/src/bin/e_appinfo.c +++ b/src/bin/e_appinfo.c @@ -99,9 +99,37 @@ e_appinfo_pid_get(E_Appinfo *epai) EINTERN Eina_Bool e_appinfo_pid_set(E_Appinfo *eai, pid_t pid) { + E_Appinfo *eai2; + Eina_List *l, *ll; + EINA_SAFETY_ON_NULL_RETURN_VAL(eai, EINA_FALSE); EINA_SAFETY_ON_TRUE_RETURN_VAL(pid <= 0, EINA_FALSE); + // find appinfo with same pid + EINA_LIST_FOREACH_SAFE(appinfo_list, l, ll, eai2) + { + if (eai2->pid == pid) + { + if (eai2 != eai) + { + ELOGF("POL_APPINFO", "removed duplicated appinfo, eai1(%p), eai2(%p)", NULL, eai, eai2); + if (eai2->appid && e_util_strcmp(eai2->appid, eai->appid)) + ELOGF("POL_APPINFO","duplicated appinfo with separated appid", NULL); + + // duplicated appinfo. merge it! + if (!eai->appid) eai->appid = eina_stringshare_add(eai2->appid); + if (!eai->base_output_available && eai2->base_output_available) + { + ELOGF("POL_APPINFO", "copy base_output variable into appinfo, eai1(%p) <- eai2(%p)", NULL, eai, eai2); + eai->base_output_available = eai2->base_output_available; + eai->base_output_width = eai2->base_output_width; + eai->base_output_height = eai2->base_output_height; + } + e_appinfo_del(eai2); + } + } + } + eai->pid = pid; ELOGF("POL_APPINFO", "appinfo(%p) set pid(%u)", NULL, eai, pid); @@ -114,9 +142,37 @@ e_appinfo_pid_set(E_Appinfo *eai, pid_t pid) EINTERN Eina_Bool e_appinfo_appid_set(E_Appinfo *eai, const char *appid) { + E_Appinfo *eai2; + Eina_List *l; + EINA_SAFETY_ON_NULL_RETURN_VAL(eai, EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(appid, EINA_FALSE); + // find appinfo with same appid + EINA_LIST_FOREACH(appinfo_list, l, eai2) + { + if (!e_util_strcmp(eai2->appid, appid)) + { + if (eai2 != eai) + { + ELOGF("POL_APPINFO", "removed duplicated appinfo, eai1(%p), eai2(%p)", NULL, eai, eai2); + if ((eai2->pid > 0) && (eai2->pid != eai->pid)) + ELOGF("POL_APPINFO", "duplicated appinfo with separated pid", NULL); + + // duplicated appinfo. merge it! + if (!eai->pid) eai->pid = eai2->pid; + if (!eai->base_output_available && eai2->base_output_available) + { + ELOGF("POL_APPINFO", "copy base_output variable into appinfo, eai1(%p) <- eai2(%p)", NULL, eai, eai2); + eai->base_output_available = eai2->base_output_available; + eai->base_output_width = eai2->base_output_width; + eai->base_output_height = eai2->base_output_height; + } + e_appinfo_del(eai2); + } + } + } + if (eai->appid) eina_stringshare_del(eai->appid);