From 35526933af105f20fa20e0a6a3aefa0d75bc7b55 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Tue, 9 Jun 2009 16:02:20 +0000 Subject: [PATCH] * eina: Remove memory leak (patch from Andre Dieb). SVN revision: 40986 --- legacy/eina/src/lib/eina_error.c | 1 - legacy/eina/src/lib/eina_mempool.c | 33 +++++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/legacy/eina/src/lib/eina_error.c b/legacy/eina/src/lib/eina_error.c index 09d7a25398..a3f0a22e97 100644 --- a/legacy/eina/src/lib/eina_error.c +++ b/legacy/eina/src/lib/eina_error.c @@ -530,7 +530,6 @@ EAPI int eina_error_init(void) { char *level; /* TODO register the eina's basic errors */ - /* TODO load the environment variable for getting the log level */ if ((level = getenv("EINA_ERROR_LEVEL"))) { _error_level = atoi(level); diff --git a/legacy/eina/src/lib/eina_mempool.c b/legacy/eina/src/lib/eina_mempool.c index 61b6a217b5..c28ec25b06 100644 --- a/legacy/eina/src/lib/eina_mempool.c +++ b/legacy/eina/src/lib/eina_mempool.c @@ -123,8 +123,16 @@ eina_mempool_init(void) { char *path; - eina_hash_init(); - eina_module_init(); + if (!eina_hash_init()) + { + fprintf(stderr, "Could not initialize eina hash module.\n"); + return 0; + } + if (!eina_module_init()) + { + fprintf(stderr, "Could not initialize eina module module.\n"); + goto module_init_error; + } EINA_ERROR_NOT_MEMPOOL_MODULE = eina_error_msg_register("Not a memory pool module."); _backends = eina_hash_string_superfast_new(NULL); @@ -147,7 +155,8 @@ eina_mempool_init(void) if (!_modules) { EINA_ERROR_PERR("ERROR: no mempool modules able to be loaded.\n"); - abort(); + eina_hash_free(_backends); + goto mempool_init_error; } eina_module_list_load(_modules); /* builtin backends */ @@ -165,6 +174,14 @@ eina_mempool_init(void) #endif } return ++_init_count; + + mempool_init_error: + eina_module_shutdown(); + module_init_error: + eina_hash_shutdown(); + + return 0; + } /** @@ -190,9 +207,15 @@ eina_mempool_shutdown(void) ememoa_fixed_shutdown(); #endif /* dynamic backends */ - eina_module_list_unload(_modules); + eina_module_list_delete(_modules); + if (_modules) + eina_array_free(_modules); + eina_module_shutdown(); - /* TODO delete the _modules list */ + + if (_backends) + eina_hash_free(_backends); + eina_hash_shutdown(); return 0; }