englebass pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=575f466a1022b1827d7cbbf6f205d3ee674f4bec

commit 575f466a1022b1827d7cbbf6f205d3ee674f4bec
Author: Sebastian Dransfeld <[email protected]>
Date:   Fri Nov 29 22:18:51 2013 +0100

    efreet: improve locking
    
    Do find and ref inside lock, so no one can ref-- after we find desktop
---
 src/lib/efreet/efreet_desktop.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/lib/efreet/efreet_desktop.c b/src/lib/efreet/efreet_desktop.c
index 9c4c4e7..dab5e56 100644
--- a/src/lib/efreet/efreet_desktop.c
+++ b/src/lib/efreet/efreet_desktop.c
@@ -213,11 +213,11 @@ efreet_desktop_new(const char *file)
     tmp = eina_file_path_sanitize(file);
     if (!tmp) return NULL;
 
+    eina_lock_take(&_lock);
     desktop = efreet_cache_desktop_find(tmp);
     free(tmp);
     if (desktop)
     {
-        eina_lock_take(&_lock);
         desktop->ref++;
         eina_lock_release(&_lock);
         if (!efreet_desktop_environment_check(desktop))
@@ -227,6 +227,7 @@ efreet_desktop_new(const char *file)
         }
         return desktop;
     }
+    eina_lock_release(&_lock);
     return efreet_desktop_uncached_new(file);
 }
 

-- 


Reply via email to