diff options
author | Subhransu Mohanty <smohantty@gmail.com> | 2020-06-03 13:03:39 +0900 |
---|---|---|
committer | Hermet Park <chuneon.park@samsung.com> | 2020-06-03 13:03:39 +0900 |
commit | 97f4f7127a653db1ad1b69ecb3a2cb788ee8c5a1 (patch) | |
tree | 86862ded7e1ac1460b2d840278382ffafd742013 | |
parent | c77a34402a9ea21ce18fb05c01f546f7898cc557 (diff) | |
download | efl-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.c | 13 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_generic/evas_engine.c | 3 |
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); |