From 9033f052635ec92d9eba67be3eda31de5efa09c7 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Fri, 5 Mar 2010 17:29:37 +0000 Subject: [PATCH] * eet: Fix a dead lock when eet file was open more than once. SVN revision: 46892 --- legacy/eet/src/lib/eet_lib.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/legacy/eet/src/lib/eet_lib.c b/legacy/eet/src/lib/eet_lib.c index 4ed8432f60..b32a73b1d1 100644 --- a/legacy/eet/src/lib/eet_lib.c +++ b/legacy/eet/src/lib/eet_lib.c @@ -1333,7 +1333,7 @@ eet_internal_close(Eet_File *ef, Eina_Bool locked) /* deref */ ef->references--; /* if its still referenced - dont go any further */ - if (ef->references > 0) return EET_ERROR_NONE; + if (ef->references > 0) goto on_error; /* flush any writes */ err = eet_flush2(ef); @@ -1342,10 +1342,7 @@ eet_internal_close(Eet_File *ef, Eina_Bool locked) /* if not urgent to delete it - dont free it - leave it in cache */ if ((!ef->delete_me_now) && (ef->mode == EET_FILE_MODE_READ)) - { - if (!locked) UNLOCK_CACHE; - return EET_ERROR_NONE; - } + goto on_error; /* remove from cache */ if (ef->mode == EET_FILE_MODE_READ) @@ -1354,10 +1351,7 @@ eet_internal_close(Eet_File *ef, Eina_Bool locked) eet_cache_del(ef, &eet_writers, &eet_writers_num, &eet_writers_alloc); /* we can unlock the cache now */ - if (!locked) - { - UNLOCK_CACHE; - } + if (!locked) UNLOCK_CACHE; DESTROY_FILE(ef); @@ -1408,6 +1402,10 @@ eet_internal_close(Eet_File *ef, Eina_Bool locked) /* free it */ free(ef); return err; + + on_error: + if (!locked) UNLOCK_CACHE; + return EET_ERROR_NONE; } EAPI Eet_File *