From 49fa59342f94776e21185d179fd7201e7edbcc08 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Tue, 4 Oct 2011 01:55:41 +0000 Subject: [PATCH] eina: forgotten lock in eina_file. SVN revision: 63786 --- legacy/eina/src/lib/eina_file.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/legacy/eina/src/lib/eina_file.c b/legacy/eina/src/lib/eina_file.c index 92d621528a..3949e08b29 100644 --- a/legacy/eina/src/lib/eina_file.c +++ b/legacy/eina/src/lib/eina_file.c @@ -785,7 +785,7 @@ eina_file_open(const char *filename, Eina_Bool shared) eina_lock_take(&_eina_file_lock_cache); file = eina_hash_find(_eina_file_cache, filename); - if ((file) && + if ((file) && ((file->mtime != file_stat.st_mtime) || (file->length != (unsigned long long) file_stat.st_size) || (file->inode != file_stat.st_ino))) @@ -799,7 +799,11 @@ eina_file_open(const char *filename, Eina_Bool shared) if (!file) { n = malloc(sizeof (Eina_File) + strlen(filename) + 1); - if (!n) goto on_error; + if (!n) + { + eina_lock_release(&_eina_file_lock_cache); + goto on_error; + } n->filename = (char*) (n + 1); strcpy((char*) n->filename, filename); @@ -843,13 +847,17 @@ EAPI void eina_file_close(Eina_File *file) { EINA_SAFETY_ON_NULL_RETURN(file); - + eina_lock_take(&file->lock); file->refcount--; eina_lock_release(&file->lock); if (file->refcount != 0) return; + eina_lock_take(&_eina_file_lock_cache); + eina_hash_del(_eina_file_cache, file->filename, file); + + eina_lock_release(&_eina_file_lock_cache); } EAPI size_t