elm_genlist/elm_gengrid: fix memory leak caused by efl_wref_del.

Summary:
efl_wref_del makes pointer to NULL.
So we should copy pointer before efl_wref_del is called.

Reviewers: SanghyeonLee, cedric

Reviewed By: SanghyeonLee

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D11866
This commit is contained in:
Hosang Kim 2020-05-21 18:36:10 +09:00 committed by Stefan Schmidt
parent 7de6b87508
commit e81c326088
2 changed files with 14 additions and 4 deletions

View File

@ -165,8 +165,10 @@ _item_cache_free(Item_Cache *itc)
/* does not exist if cache item has just been reused */
if (itc->base_view)
{
Evas_Object *view = itc->base_view;
efl_wref_del(itc->base_view, &itc->base_view);
efl_del(itc->base_view);
efl_del(view);
itc->base_view = NULL;
}
eina_stringshare_del(itc->item_style);
EINA_LIST_FREE(itc->contents, c)
@ -1494,7 +1496,10 @@ _item_unrealize_cb(Elm_Gen_Item *it)
Evas_Object *c;
if (!_item_cache_add(it, _content_cache_add(it, &cache)))
{
ELM_SAFE_FREE(VIEW(it), evas_object_del);
Evas_Object *view = VIEW(it);
efl_wref_del(VIEW(it), &VIEW(it));
ELM_SAFE_FREE(view, evas_object_del);
VIEW(it) = NULL;
ELM_SAFE_FREE(it->spacer, evas_object_del);
EINA_LIST_FREE(cache, c)
evas_object_del(c);

View File

@ -1555,8 +1555,10 @@ _item_cache_free(Item_Cache *itc)
/* does not exist if cache item has just been reused */
if (itc->base_view)
{
Evas_Object *view = itc->base_view;
efl_wref_del(itc->base_view, &itc->base_view);
efl_del(itc->base_view);
efl_del(view);
itc->base_view = NULL;
}
itc->item_class = NULL;
EINA_LIST_FREE(itc->contents, c)
@ -5386,7 +5388,10 @@ _item_unrealize(Elm_Gen_Item *it)
if (!_item_cache_add(it, _content_cache_add(it, &cache)))
{
ELM_SAFE_FREE(VIEW(it), efl_del);
Evas_Object *view = VIEW(it);
efl_wref_del(VIEW(it), &VIEW(it));
ELM_SAFE_FREE(view, efl_del);
VIEW(it) = NULL;
it->callbacks = EINA_FALSE;
ELM_SAFE_FREE(it->spacer, evas_object_del);
EINA_LIST_FREE(cache, c)