From 68159d9bddd1287cb952133438abe809f3843cf9 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Fri, 22 Jun 2007 09:39:58 +0000 Subject: [PATCH] - Add ref function. - Don't free Efreet_Desktops on shutdown, this is the responsibility of those who do efreet_desktop_get. If we free them here, there will be a problem with the events in efreet_util, as the events might try to free the Efreet_Desktops during ecore_shutdown. - Check if the cache exists before trying to remove a Efreet_Desktop, as we might try to free a Efreet_Desktop after efreet_shutdown. SVN revision: 30428 --- legacy/efreet/src/lib/efreet_desktop.c | 16 +++++++++++++++- legacy/efreet/src/lib/efreet_desktop.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/legacy/efreet/src/lib/efreet_desktop.c b/legacy/efreet/src/lib/efreet_desktop.c index 7cfaf606a3..f527398171 100644 --- a/legacy/efreet/src/lib/efreet_desktop.c +++ b/legacy/efreet/src/lib/efreet_desktop.c @@ -116,8 +116,10 @@ efreet_desktop_init(void) efreet_desktop_cache = ecore_hash_new(ecore_str_hash, ecore_str_compare); ecore_hash_set_free_key(efreet_desktop_cache, ECORE_FREE_CB(free)); +#if 0 ecore_hash_set_free_value(efreet_desktop_cache, ECORE_FREE_CB(efreet_desktop_free)); +#endif efreet_desktop_types = ecore_list_new(); ecore_list_set_free_cb(efreet_desktop_types, @@ -219,6 +221,18 @@ efreet_desktop_get(const char *file) return desktop; } +/** + * @param desktop: The Efreet_Desktop to ref + * @return Returns the new reference count + */ +int +efreet_desktop_ref(Efreet_Desktop *desktop) +{ + if (!desktop) return 0; + desktop->ref++; + return desktop->ref; +} + /** * @param file: The file to create the Efreet_Desktop from * @return Returns a new empty_Efreet_Desktop on success, NULL on failure @@ -460,7 +474,7 @@ efreet_desktop_free(Efreet_Desktop *desktop) desktop->ref--; if (desktop->ref > 0) return; - if (desktop->cached) + if (desktop->cached && efreet_desktop_cache) ecore_hash_remove(efreet_desktop_cache, desktop->orig_path); IF_FREE(desktop->orig_path); diff --git a/legacy/efreet/src/lib/efreet_desktop.h b/legacy/efreet/src/lib/efreet_desktop.h index b89c5d0914..1f27662b5b 100644 --- a/legacy/efreet/src/lib/efreet_desktop.h +++ b/legacy/efreet/src/lib/efreet_desktop.h @@ -100,6 +100,7 @@ struct Efreet_Desktop }; Efreet_Desktop *efreet_desktop_get(const char *file); +int efreet_desktop_ref(Efreet_Desktop *desktop); Efreet_Desktop *efreet_desktop_empty_new(const char *file); Efreet_Desktop *efreet_desktop_new(const char *file); void efreet_desktop_free(Efreet_Desktop *desktop);