summaryrefslogtreecommitdiff
path: root/content/fetchers/file.c
diff options
context:
space:
mode:
Diffstat (limited to 'content/fetchers/file.c')
-rw-r--r--content/fetchers/file.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/content/fetchers/file.c b/content/fetchers/file.c
index b5b4221dc..ede001faf 100644
--- a/content/fetchers/file.c
+++ b/content/fetchers/file.c
@@ -792,6 +792,7 @@ static void fetch_file_process(struct fetch_file_context *ctx)
static void fetch_file_poll(lwc_string *scheme)
{
struct fetch_file_context *c, *next;
+ bool was_last_item = false;
if (ring == NULL) return;
@@ -819,14 +820,28 @@ static void fetch_file_poll(lwc_string *scheme)
* processing this item may have added to the ring.
*/
next = c->r_next;
+ was_last_item = next == c;
fetch_remove_from_queues(c->fetchh);
fetch_free(c->fetchh);
+ /* Having called into the fetch machinery, our ring might
+ * have been updated
+ */
+ if (was_last_item) {
+ /* We were previously the last item in the ring
+ * so let's reset to the head of the ring
+ * and try again
+ */
+ c = ring;
+ } else {
+ c = next;
+ }
+
/* Advance to next ring entry, exiting if we've reached
* the start of the ring or the ring has become empty
*/
- } while ( (c = next) != ring && ring != NULL);
+ } while (ring != NULL);
}
nserror fetch_file_register(void)