Index: src/trackerd/tracker-crawler.c =================================================================== --- src/trackerd/tracker-crawler.c (revision 1915) +++ src/trackerd/tracker-crawler.c (working copy) @@ -644,7 +644,7 @@ file_enumerate_next_cb (GObject *ob GFileEnumerator *enumerator; GFile *parent, *child; GFileInfo *info; - GList *files; + GList *files, *loop; enumerator = G_FILE_ENUMERATOR (object); @@ -670,26 +670,35 @@ file_enumerate_next_cb (GObject *ob } /* Files should only have 1 item in it */ - info = files->data; - child = g_file_get_child (parent, g_file_info_get_name (info)); - if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY) { - /* This is a bit of a hack, but we assume this is a - * recursive lookup because the current non-recursive - * path is NULL, meaning they have all been traversed - * already. - */ - if (crawler->private->handled_paths) { - add_directory (crawler, child); + loop = files; + + while (loop) { + info = loop->data; + + child = g_file_get_child (parent, g_file_info_get_name (info)); + + if (g_file_info_get_file_type (info) == G_FILE_TYPE_DIRECTORY) { + /* This is a bit of a hack, but we assume this is a + * recursive lookup because the current non-recursive + * path is NULL, meaning they have all been traversed + * already. + */ + if (crawler->private->handled_paths) { + add_directory (crawler, child); + } + } else { + add_file (crawler, child); } - } else { - add_file (crawler, child); - } - g_object_unref (child); + g_object_unref (child); + + loop = g_list_next (loop); + } + g_list_free (files); - /* Get next file */ + /* Get next files */ file_enumerate_next (enumerator, ed); } @@ -698,8 +707,8 @@ file_enumerate_next (GFileEnumerator *en EnumeratorData *ed) { g_file_enumerator_next_files_async (enumerator, - 1, - G_PRIORITY_DEFAULT, + 10, + G_PRIORITY_LOW, NULL, file_enumerate_next_cb, ed);