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); } --
