raster pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=931d02378b3152b530d84bff09fd842cf0998f53
commit 931d02378b3152b530d84bff09fd842cf0998f53 Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com> Date: Thu Dec 5 17:41:48 2013 +0900 efreet - fix recusrion checks need to pop as well as push. stable release - cherry-pick me! this fixes a lack of popping the efret recursion stack handler. this wasn't done in 1.8 and is a bug. --- src/bin/efreet/efreet_desktop_cache_create.c | 8 +++++++- src/bin/efreet/efreetd_cache.c | 8 ++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/bin/efreet/efreet_desktop_cache_create.c b/src/bin/efreet/efreet_desktop_cache_create.c index 9ddf26d..d67084d 100644 --- a/src/bin/efreet/efreet_desktop_cache_create.c +++ b/src/bin/efreet/efreet_desktop_cache_create.c @@ -153,7 +153,11 @@ cache_scan(Eina_Inarray *stack, const char *path, const char *base_id, eina_inarray_push(stack, &st); it = eina_file_stat_ls(path); - if (!it) return 1; + if (!it) + { + eina_inarray_pop(stack); + return 1; + } id[0] = '\0'; EINA_ITERATOR_FOREACH(it, info) { @@ -182,11 +186,13 @@ cache_scan(Eina_Inarray *stack, const char *path, const char *base_id, if (!cache_add(info->path, file_id, priority, changed)) { eina_iterator_free(it); + eina_inarray_pop(stack); return 0; } } } eina_iterator_free(it); + eina_inarray_pop(stack); return 1; } diff --git a/src/bin/efreet/efreetd_cache.c b/src/bin/efreet/efreetd_cache.c index 5b45487..0d58897 100644 --- a/src/bin/efreet/efreetd_cache.c +++ b/src/bin/efreet/efreetd_cache.c @@ -284,7 +284,7 @@ icon_changes_listen_recursive(Eina_Inarray *stack, const char *path, Eina_Bool b } if (ecore_file_is_dir(path)) icon_changes_monitor_add(path); it = eina_file_stat_ls(path); - if (!it) return; + if (!it) goto end; EINA_ITERATOR_FOREACH(it, info) { if (info->path[info->name_start] == '.') continue; @@ -293,6 +293,8 @@ icon_changes_listen_recursive(Eina_Inarray *stack, const char *path, Eina_Bool b icon_changes_listen_recursive(stack, info->path, EINA_FALSE); } eina_iterator_free(it); +end: + eina_inarray_pop(stack); } static void @@ -319,7 +321,7 @@ desktop_changes_listen_recursive(Eina_Inarray *stack, const char *path, Eina_Boo } if (ecore_file_is_dir(path)) desktop_changes_monitor_add(path); it = eina_file_stat_ls(path); - if (!it) return; + if (!it) goto end; EINA_ITERATOR_FOREACH(it, info) { if (info->path[info->name_start] == '.') continue; @@ -328,6 +330,8 @@ desktop_changes_listen_recursive(Eina_Inarray *stack, const char *path, Eina_Boo desktop_changes_listen_recursive(stack, info->path, EINA_FALSE); } eina_iterator_free(it); +end: + eina_inarray_pop(stack); } static void --