From: Enlightenment C. <no...@cv...> - 2007-06-22 09:40:00
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_desktop.h efreet_desktop.c Log Message: - 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. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_desktop.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- efreet_desktop.h 20 Jun 2007 18:04:26 -0000 1.12 +++ efreet_desktop.h 22 Jun 2007 09:39:58 -0000 1.13 @@ -100,6 +100,7 @@ }; 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); =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_desktop.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- efreet_desktop.c 20 Jun 2007 18:04:26 -0000 1.20 +++ efreet_desktop.c 22 Jun 2007 09:39:58 -0000 1.21 @@ -116,8 +116,10 @@ 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, @@ -220,6 +222,18 @@ } /** + * @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 * @brief Creates a new empty Efreet_Desktop structure or NULL on failure @@ -460,7 +474,7 @@ 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); |