diff --git a/querier.cc b/querier.cc index 4839a8bd10..b9a6ce823a 100644 --- a/querier.cc +++ b/querier.cc @@ -273,13 +273,15 @@ static void insert_querier( memory_usage += q.memory_usage(); if (memory_usage >= max_queriers_memory_usage) { - auto it = entries.begin(); - const auto end = entries.end(); - while (it != end && memory_usage >= max_queriers_memory_usage) { - ++stats.memory_based_evictions; + while (!entries.empty() && memory_usage >= max_queriers_memory_usage) { + auto it = entries.begin(); memory_usage -= it->memory_usage(); - --stats.population; - it = entries.erase(it); + auto ir = sem.unregister_inactive_read(it->get_inactive_handle()); + ir->evict(); + // querier_inactive_read::evict() updates resource_based_evictions, + // (and population) while we want memory_based_evictions: + --stats.resource_based_evictions; + ++stats.memory_based_evictions; } }