diff --git a/tumblerd/tumbler-manager.c b/tumblerd/tumbler-manager.c index 5968bca..3e0a0fa 100644 --- a/tumblerd/tumbler-manager.c +++ b/tumblerd/tumbler-manager.c @@ -1435,6 +1435,8 @@ tumbler_manager_directory_deleted (TumblerManager *manager, g_hash_table_iter_init (&iter, manager->thumbnailers); while (g_hash_table_iter_next (&iter, (gpointer) &hash_key, (gpointer) &list)) { + GList *to_delete = NULL; + /* all lists in the hash table should be defined and non-empty */ g_assert (list != NULL); g_assert (*list != NULL); @@ -1453,7 +1455,7 @@ tumbler_manager_directory_deleted (TumblerManager *manager, if (lp == *list) { /* remove the info from the list */ - *list = g_list_delete_link (*list, lp); + to_delete = g_list_prepend (to_delete, lp); /* remove the corresponding thumbnailer from the registry */ tumbler_registry_remove (manager->registry, info->thumbnailer); @@ -1488,7 +1490,7 @@ tumbler_manager_directory_deleted (TumblerManager *manager, { /* the info is not the first in the list, so we can simply * remove it from the list */ - *list = g_list_delete_link (*list, lp); + to_delete = g_list_prepend (to_delete, lp); } /* destroy the thumbnailer info */ @@ -1496,6 +1498,9 @@ tumbler_manager_directory_deleted (TumblerManager *manager, } } + for (lp = to_delete; lp != NULL; lp = lp->next) + *list = g_list_delete_link (*list, lp); + if (*list == NULL) delete_keys = g_list_prepend (delete_keys, (gpointer) hash_key); }