diff options
author | Hosang Kim <hosang12.kim@samsung.com> | 2020-05-21 18:36:10 +0900 |
---|---|---|
committer | SangHyeon Jade Lee <sh10233.lee@samsung.com> | 2020-05-21 18:37:27 +0900 |
commit | c493e80c216c71373bfa4898841ffaca32dd18a9 (patch) | |
tree | f2e2d06c4bc25998ec5d69f340d5ffbbcf542493 | |
parent | f9a108c51a6a7f013df8dfd8c7735e1fa6d7dacc (diff) | |
download | efl-c493e80c216c71373bfa4898841ffaca32dd18a9.tar.gz |
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
-rw-r--r-- | src/lib/elementary/elm_gengrid.c | 9 | ||||
-rw-r--r-- | src/lib/elementary/elm_genlist.c | 9 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c index 707272be55..8446db8cab 100644 --- a/src/lib/elementary/elm_gengrid.c +++ b/src/lib/elementary/elm_gengrid.c @@ -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); diff --git a/src/lib/elementary/elm_genlist.c b/src/lib/elementary/elm_genlist.c index 5da1517fc8..6866b14965 100644 --- a/src/lib/elementary/elm_genlist.c +++ b/src/lib/elementary/elm_genlist.c @@ -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) |