diff --git a/modules/s_fetch.cc b/modules/s_fetch.cc index 0c46e6f7d..a44c15689 100644 --- a/modules/s_fetch.cc +++ b/modules/s_fetch.cc @@ -587,7 +587,9 @@ try }); }); - request_cleanup(); + if(request_cleanup()) + continue; + request_handle(); } } @@ -602,17 +604,22 @@ catch(const std::exception &e) throw; } -void +size_t ircd::m::fetch::request_cleanup() { + size_t ret(0); auto it(begin(requests)); while(it != end(requests)) { if(it->finished && empty(it->buf)) + { it = requests.erase(it); - else - ++it; + ++ret; + } + else ++it; } + + return ret; } void diff --git a/modules/s_fetch.h b/modules/s_fetch.h index eeb189b08..ccd9a06bc 100644 --- a/modules/s_fetch.h +++ b/modules/s_fetch.h @@ -40,7 +40,7 @@ namespace ircd::m::fetch static void eval_worker(); static void request_handle(const decltype(requests)::iterator &); static void request_handle(); - static void request_cleanup(); + static size_t request_cleanup(); static void request_worker(); static void hook_handler(const event &, vm::eval &); static void init();