* eet: Fix a dead lock when eet file was open more than once.

SVN revision: 46892
This commit is contained in:
Cedric BAIL 2010-03-05 17:29:37 +00:00
parent c285985eeb
commit 9033f05263
1 changed files with 7 additions and 9 deletions

View File

@ -1333,7 +1333,7 @@ eet_internal_close(Eet_File *ef, Eina_Bool locked)
/* deref */ /* deref */
ef->references--; ef->references--;
/* if its still referenced - dont go any further */ /* 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 */ /* flush any writes */
err = eet_flush2(ef); 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 not urgent to delete it - dont free it - leave it in cache */
if ((!ef->delete_me_now) && (ef->mode == EET_FILE_MODE_READ)) if ((!ef->delete_me_now) && (ef->mode == EET_FILE_MODE_READ))
{ goto on_error;
if (!locked) UNLOCK_CACHE;
return EET_ERROR_NONE;
}
/* remove from cache */ /* remove from cache */
if (ef->mode == EET_FILE_MODE_READ) 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); eet_cache_del(ef, &eet_writers, &eet_writers_num, &eet_writers_alloc);
/* we can unlock the cache now */ /* we can unlock the cache now */
if (!locked) if (!locked) UNLOCK_CACHE;
{
UNLOCK_CACHE;
}
DESTROY_FILE(ef); DESTROY_FILE(ef);
@ -1408,6 +1402,10 @@ eet_internal_close(Eet_File *ef, Eina_Bool locked)
/* free it */ /* free it */
free(ef); free(ef);
return err; return err;
on_error:
if (!locked) UNLOCK_CACHE;
return EET_ERROR_NONE;
} }
EAPI Eet_File * EAPI Eet_File *