summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubhransu Mohanty <smohantty@gmail.com>2020-06-03 13:03:39 +0900
committerHermet Park <chuneon.park@samsung.com>2020-06-03 13:03:39 +0900
commit97f4f7127a653db1ad1b69ecb3a2cb788ee8c5a1 (patch)
tree86862ded7e1ac1460b2d840278382ffafd742013
parentc77a34402a9ea21ce18fb05c01f546f7898cc557 (diff)
downloadefl-97f4f7127a653db1ad1b69ecb3a2cb788ee8c5a1.tar.gz
evas/engine: Fix memory leak in generic cache.
Summary: During shutdown we used to call engine_image_free() which was causing some deadlock. as we have evas_cache which takes care of freeing all the images we just have to delete the generic cache without freeing the image during shutdown. Reviewers: Hermet Reviewed By: Hermet Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D11915
-rw-r--r--src/lib/evas/common/evas_common_generic_cache.c13
-rw-r--r--src/modules/evas/engines/gl_generic/evas_engine.c3
2 files changed, 12 insertions, 4 deletions
diff --git a/src/lib/evas/common/evas_common_generic_cache.c b/src/lib/evas/common/evas_common_generic_cache.c
index ddb055deb2..4fc5a8bbac 100644
--- a/src/lib/evas/common/evas_common_generic_cache.c
+++ b/src/lib/evas/common/evas_common_generic_cache.c
@@ -14,8 +14,17 @@ generic_cache_new(void *user_data, Generic_Cache_Free func)
EAPI void
generic_cache_destroy(Generic_Cache *cache)
{
- generic_cache_dump(cache);
- eina_hash_free(cache->hash);
+ Generic_Cache_Entry *entry;
+ if (cache)
+ {
+ EINA_LIST_FREE(cache->lru_list, entry)
+ {
+ free(entry);
+ }
+
+ eina_hash_free(cache->hash);
+ free(cache);
+ }
}
EAPI void
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c
index 414856794f..593f16954a 100644
--- a/src/modules/evas/engines/gl_generic/evas_engine.c
+++ b/src/modules/evas/engines/gl_generic/evas_engine.c
@@ -167,8 +167,7 @@ eng_engine_free(void *engine)
Render_Engine_GL_Generic *e = engine;
Render_Output_GL_Generic *output;
- //@FIXME this causes some deadlock while freeing the engine image.
- //generic_cache_destroy(e->software.surface_cache);
+ generic_cache_destroy(e->software.surface_cache);
EINA_LIST_FREE(e->software.outputs, output)
ERR("Output %p not properly cleaned before engine destruction.", output);