eina: fix the crash seen by some during rebuild.

Before this patch, we were unconditionnaly destroying the Eina_File if that one
did change on disk. We also make sure that we remove the right entry from the cache
if the file did change there.
This commit is contained in:
Cedric Bail 2013-11-21 14:46:59 +09:00
parent eea338764a
commit 62b469749a
2 changed files with 10 additions and 2 deletions

View File

@ -868,7 +868,6 @@ eina_file_open(const char *path, Eina_Bool shared)
{
file->delete_me = EINA_TRUE;
eina_hash_del(_eina_file_cache, file->filename, file);
eina_file_clean_close(file);
file = NULL;
}

View File

@ -463,6 +463,8 @@ EAPI void
eina_file_close(Eina_File *file)
{
Eina_Bool leave = EINA_TRUE;
unsigned int length;
unsigned int key;
EINA_SAFETY_ON_NULL_RETURN(file);
@ -474,7 +476,14 @@ eina_file_close(Eina_File *file)
eina_lock_release(&file->lock);
if (leave) goto end;
eina_hash_del(_eina_file_cache, file->filename, file);
length = strlen(file->filename) + 1;
key = eina_hash_djb2(file->filename, length);
if (eina_hash_find_by_hash(_eina_file_cache,
file->filename, length, key) == file)
{
eina_hash_del_by_key_hash(_eina_file_cache,
file->filename, length, key);
}
eina_file_clean_close(file);
end: