From 89e468422d8a885030120396b69e0fe488041aca Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Mon, 24 Feb 2020 09:46:59 +0000 Subject: about: Correct handling of ring in fetch_about_poll Signed-off-by: Daniel Silverstone --- content/fetchers/about.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'content/fetchers/about.c') diff --git a/content/fetchers/about.c b/content/fetchers/about.c index 02bac8175..4b8562cac 100644 --- a/content/fetchers/about.c +++ b/content/fetchers/about.c @@ -1644,6 +1644,7 @@ static void fetch_about_abort(void *ctx) static void fetch_about_poll(lwc_string *scheme) { struct fetch_about_context *c, *next; + bool was_last_item = false; if (ring == NULL) return; @@ -1671,14 +1672,28 @@ static void fetch_about_poll(lwc_string *scheme) * as 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); } -- cgit v1.2.3