aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Bail <cedric.bail@samsung.com>2013-11-21 14:46:59 +0900
committerCedric Bail <cedric.bail@samsung.com>2013-11-21 14:49:08 +0900
commit62b469749a4b79351b9bc52d40b9249ee48086bf (patch)
tree5cabfe20485dadf6a7de2db316e50363b8d4288d
parentedje - actually we don't need extra variable. (diff)
downloadefl-62b469749a4b79351b9bc52d40b9249ee48086bf.tar.gz
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.
-rw-r--r--src/lib/eina/eina_file.c1
-rw-r--r--src/lib/eina/eina_file_common.c11
2 files changed, 10 insertions, 2 deletions
diff --git a/src/lib/eina/eina_file.c b/src/lib/eina/eina_file.c
index 1ae3681f80..ca2fe612dc 100644
--- a/src/lib/eina/eina_file.c
+++ b/src/lib/eina/eina_file.c
@@ -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;
}
diff --git a/src/lib/eina/eina_file_common.c b/src/lib/eina/eina_file_common.c
index 7952190328..f6ae3bed5e 100644
--- a/src/lib/eina/eina_file_common.c
+++ b/src/lib/eina/eina_file_common.c
@@ -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: