leaks--! this code is riddled with leaks! really really bad!

SVN revision: 39647
This commit is contained in:
Carsten Haitzler 2009-03-23 10:27:54 +00:00
parent 19802a5705
commit ddb11ee846
4 changed files with 60 additions and 17 deletions

View File

@ -66,6 +66,7 @@ static void efreet_icon_theme_index_read(Efreet_Icon_Theme *theme,
static Efreet_Icon_Theme_Directory *efreet_icon_theme_directory_new(Efreet_Ini *ini,
const char *name);
static void efreet_icon_theme_directory_free(Efreet_Icon_Theme_Directory *dir);
static void efreet_icon_theme_cache_check(Efreet_Icon_Theme *theme);
static int efreet_icon_theme_cache_check_dir(Efreet_Icon_Theme *theme,
@ -131,18 +132,26 @@ efreet_icon_init(void)
void
efreet_icon_shutdown(void)
{
void *d;
if (--efreet_icon_init_count)
return;
IF_FREE(efreet_icon_user_dir);
IF_FREE(efreet_icon_deprecated_user_dir);
IF_FREE_LIST(efreet_icon_extensions);
EINA_LIST_FREE(efreet_icon_extensions, d) free(d);
IF_FREE_HASH(efreet_icon_themes);
IF_FREE_LIST(efreet_extra_icon_dirs);
IF_FREE_HASH(efreet_icon_cache);
if (fake_null)
{
efreet_icon_theme_free(fake_null);
fake_null = NULL;
}
ecore_shutdown();
efreet_icon_init_count = 0;
}
@ -324,6 +333,7 @@ efreet_icon_find_theme_check(const char *theme_name)
if (theme_name) theme = efreet_icon_theme_find(theme_name);
if (!theme)
{
if ((fake_null) && (!theme_name)) return fake_null;
theme = efreet_icon_theme_new();
theme->fake = 1;
if (theme_name)
@ -1107,19 +1117,20 @@ efreet_icon_theme_new(void)
static void
efreet_icon_theme_free(Efreet_Icon_Theme *theme)
{
if (!theme) return;
void *d;
if (!theme) return;
IF_RELEASE(theme->name.internal);
IF_RELEASE(theme->name.name);
IF_RELEASE(theme->name.internal);
IF_RELEASE(theme->name.name);
IF_FREE(theme->comment);
IF_FREE(theme->example_icon);
IF_FREE(theme->comment);
IF_FREE(theme->example_icon);
EINA_LIST_FREE(theme->paths, d) free(d);
EINA_LIST_FREE(theme->inherits, d) free(d);
EINA_LIST_FREE(theme->directories, d) efreet_icon_theme_directory_free(d);
IF_FREE_LIST(theme->paths);
IF_FREE_LIST(theme->inherits);
IF_FREE_LIST(theme->directories);
FREE(theme);
FREE(theme);
}
/**
@ -1490,6 +1501,13 @@ efreet_icon_theme_directory_new(Efreet_Ini *ini, const char *name)
return dir;
}
static void
efreet_icon_theme_directory_free(Efreet_Icon_Theme_Directory *dir)
{
free(dir->name);
free(dir);
}
static int
efreet_icon_cache_find(Efreet_Icon_Cache *value, const char *key)
{

View File

@ -280,6 +280,7 @@ static void efreet_menu_create_default_layout_list(Efreet_Menu_Internal *interna
static char *efreet_menu_path_get(Efreet_Menu_Internal *internal, const char *suffix);
static Efreet_Menu_App_Dir *efreet_menu_app_dir_new(void);
static void efreet_menu_app_dir_free(Efreet_Menu_App_Dir *dir);
static Efreet_Menu_Move *efreet_menu_move_new(void);
static void efreet_menu_move_free(Efreet_Menu_Move *move);
@ -987,6 +988,8 @@ efreet_menu_internal_new(void)
void
efreet_menu_internal_free(Efreet_Menu_Internal *internal)
{
void *d;
if (!internal) return;
IF_FREE(internal->file.path);
@ -998,7 +1001,8 @@ efreet_menu_internal_free(Efreet_Menu_Internal *internal)
IF_FREE_LIST(internal->applications);
IF_FREE_DLIST(internal->directories);
IF_FREE_LIST(internal->app_dirs);
EINA_LIST_FREE(internal->app_dirs, d) efreet_menu_app_dir_free(d);
// IF_FREE_LIST(internal->app_dirs);
IF_FREE_LIST(internal->app_pool);
IF_FREE_DLIST(internal->directory_dirs);
IF_FREE_HASH(internal->directory_cache);
@ -1723,7 +1727,10 @@ efreet_menu_merge_dir(Efreet_Menu_Internal *parent, Efreet_Xml *xml, const char
snprintf(dir_path, PATH_MAX, "%s/%s", path, file->d_name);
if (!efreet_menu_merge(parent, xml, dir_path))
{
closedir(files);
return 0;
}
}
closedir(files);
@ -1895,6 +1902,7 @@ efreet_menu_handle_legacy_dir_helper(Efreet_Menu_Internal *root,
legacy_internal, file_path, prefix);
if (!ret)
{
efreet_menu_filter_free(filter);
efreet_menu_internal_free(legacy_internal);
FREE(path);
closedir(files);
@ -1947,6 +1955,7 @@ efreet_menu_handle_legacy_dir_helper(Efreet_Menu_Internal *root,
closedir(files);
FREE(path);
efreet_menu_filter_free(filter);
return legacy_internal;
}
@ -3198,6 +3207,14 @@ efreet_menu_app_dir_new(void)
return dir;
}
static void
efreet_menu_app_dir_free(Efreet_Menu_App_Dir *dir)
{
free(dir->path);
free(dir->prefix);
free(dir);
}
/**
* @internal
* @param a: The app dir to compare too
@ -3233,6 +3250,7 @@ efreet_menu_create_directory_dirs_list(Efreet_Menu_Internal *internal)
if (!internal || internal->directory_dirs) return;
internal->directory_dirs = ecore_dlist_new();
ecore_dlist_free_cb_set(internal->directory_dirs, free);
}
static void
@ -3273,6 +3291,7 @@ efreet_menu_create_directories_list(Efreet_Menu_Internal *internal)
if (!internal || internal->directories) return;
internal->directories = ecore_dlist_new();
ecore_dlist_free_cb_set(internal->directories, free);
}
static char *

View File

@ -186,6 +186,8 @@ efreet_mime_init(void)
EAPI void
efreet_mime_shutdown(void)
{
void *d;
if (_init_count == 0)
return;
_init_count--;
@ -194,8 +196,8 @@ efreet_mime_shutdown(void)
efreet_mime_icons_debug();
IF_FREE_LIST(globs);
IF_FREE_LIST(magics);
EINA_LIST_FREE(globs, d) efreet_mime_glob_free(d);
EINA_LIST_FREE(magics, d) efreet_mime_magic_free(d);
IF_FREE_HASH(monitors);
IF_FREE_HASH(wild);
IF_FREE_HASH(mime_icons);
@ -1125,13 +1127,14 @@ efreet_mime_shared_mimeinfo_magic_parse(char *data, int size)
}
}
}
/*
if (entry)
{
IF_FREE(entry->value);
IF_FREE(entry->mask);
FREE(entry);
}
*/
}
/**

View File

@ -540,7 +540,7 @@ efreet_util_cache_fill(__UNUSED__ void *data)
double start;
char buf[PATH_MAX];
if (!fill->dirs)
if ((!fill->dirs) && (!fill->files))
{
free(fill);
idler = NULL;
@ -579,7 +579,10 @@ efreet_util_cache_fill(__UNUSED__ void *data)
}
start = ecore_time_get();
if (!fill->files) fill->files = opendir(fill->current->path);
if (!fill->files)
{
fill->files = opendir(fill->current->path);
}
if (!fill->files)
{
/* Couldn't open this dir, continue to next */