From 0921e4770e4751ec9abf7757f9d11cbb5cc7f223 Mon Sep 17 00:00:00 2001 From: Yeongjong Lee Date: Fri, 26 Apr 2019 14:55:37 +0900 Subject: [PATCH] edje_calc: replace eina_stringshare_ref with eina_stringshare_add Summary: When there is circular dependency in edc, a bunch of CRI log is printed. This patch fixes it. ``` ERR<10159>:edje lib/edje/edje_calc.c:3919 _edje_part_recalc() Circular dependency in the group 'test' : longpartname -> longpartname -> longpartname2 ERR<10159>:edje lib/edje/edje_calc.c:3896 _edje_part_recalc() Circular dependency when calculating part "longpartname". Already calculating XY [03] axes. Need to calculate Y [02] axes CRI<10159>: lib/eina/eina_share_common.c:559 _eina_share_common_node_from_str() *** Eina Magic Check Failed at 0x7fb7c93ebf60 !!! Input handle is wrong type. Expected: 98761254 - Eina Stringshare Node Supplied: 2f736e6f - (unknown) CRI<10159>: lib/eina/eina_share_common.c:559 _eina_share_common_node_from_str() *** Eina Magic Check Failed at 0x7fb7c93ec5d1 !!! Input handle is wrong type. Expected: 98761254 - Eina Stringshare Node Supplied: 5f747261 - (unknown) ``` If string is already stored, `eina_stringshare_add` increase its reference count. Test Plan: test.c ``` //edje_cc test.edc && gcc -o test test.c `pkg-config --libs --cflags elementary` #include int main(int argc, char **argv) { elm_init(argc, argv); Evas_Object *win = elm_win_util_standard_add("test", "test"); Evas_Object *layout = elm_layout_add(win); elm_layout_file_set(layout, "./test.edj", "test"); elm_win_resize_object_add(win, layout); evas_object_show(layout); evas_object_resize(win, 200, 200); evas_object_show(win); elm_run(); elm_shutdown(); return 0; } ``` test.edc ``` collections { group { name: "test"; parts { rect { name: "longpartname"; desc { "default"; rel1.to: "longpartname2"; } } rect { name: "longpartname2"; type: RECT; desc { "default"; rel2.to: "longpartname"; } } } } } ``` Reviewers: SanghyeonLee, zmike Reviewed By: SanghyeonLee Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D8717 --- src/lib/edje/edje_calc.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c index ffb46c075b..f0380e4fef 100644 --- a/src/lib/edje/edje_calc.c +++ b/src/lib/edje/edje_calc.c @@ -3659,7 +3659,7 @@ _circular_dependency_find(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part *cep, Ein rp = ed->table_parts[cep->param1.description->rel1.id_x]; if (_circular_dependency_find(ed, ep, rp, arr)) { - eina_array_push(arr, eina_stringshare_ref(rp->part->name)); + eina_array_push(arr, eina_stringshare_add(rp->part->name)); return EINA_TRUE; } } @@ -3668,7 +3668,7 @@ _circular_dependency_find(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part *cep, Ein rp = ed->table_parts[cep->param1.description->rel2.id_x]; if (_circular_dependency_find(ed, ep, rp, arr)) { - eina_array_push(arr, eina_stringshare_ref(rp->part->name)); + eina_array_push(arr, eina_stringshare_add(rp->part->name)); return EINA_TRUE; } } @@ -3681,7 +3681,7 @@ _circular_dependency_find(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part *cep, Ein rp = ed->table_parts[cep->param2->description->rel1.id_x]; if (_circular_dependency_find(ed, ep, rp, arr)) { - eina_array_push(arr, eina_stringshare_ref(rp->part->name)); + eina_array_push(arr, eina_stringshare_add(rp->part->name)); return EINA_TRUE; } } @@ -3690,7 +3690,7 @@ _circular_dependency_find(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part *cep, Ein rp = ed->table_parts[cep->param2->description->rel2.id_x]; if (_circular_dependency_find(ed, ep, rp, arr)) { - eina_array_push(arr, eina_stringshare_ref(rp->part->name)); + eina_array_push(arr, eina_stringshare_add(rp->part->name)); return EINA_TRUE; } } @@ -3705,7 +3705,7 @@ _circular_dependency_find(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part *cep, Ein rp = ed->table_parts[cep->param1.description->rel1.id_y]; if (_circular_dependency_find(ed, ep, rp, arr)) { - eina_array_push(arr, eina_stringshare_ref(rp->part->name)); + eina_array_push(arr, eina_stringshare_add(rp->part->name)); return EINA_TRUE; } } @@ -3714,7 +3714,7 @@ _circular_dependency_find(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part *cep, Ein rp = ed->table_parts[cep->param1.description->rel2.id_y]; if (_circular_dependency_find(ed, ep, rp, arr)) { - eina_array_push(arr, eina_stringshare_ref(rp->part->name)); + eina_array_push(arr, eina_stringshare_add(rp->part->name)); return EINA_TRUE; } } @@ -3726,7 +3726,7 @@ _circular_dependency_find(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part *cep, Ein rp = ed->table_parts[cep->param2->description->rel1.id_y]; if (_circular_dependency_find(ed, ep, rp, arr)) { - eina_array_push(arr, eina_stringshare_ref(rp->part->name)); + eina_array_push(arr, eina_stringshare_add(rp->part->name)); return EINA_TRUE; } } @@ -3735,7 +3735,7 @@ _circular_dependency_find(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part *cep, Ein rp = ed->table_parts[cep->param2->description->rel2.id_y]; if (_circular_dependency_find(ed, ep, rp, arr)) { - eina_array_push(arr, eina_stringshare_ref(rp->part->name)); + eina_array_push(arr, eina_stringshare_add(rp->part->name)); return EINA_TRUE; } }