in squangle/mysql_client/AsyncConnectionPool.h [119:145]
void cleanup(Pred pred) {
// We keep one value to prevent its pool from being destructed in the middle
// of traversing the map
std::optional<Value> value;
for (auto it1 = level1_.begin(); it1 != level1_.end();) {
auto& list = it1->second;
DCHECK(!list.empty());
for (auto it2 = list.begin(); it2 != list.end();) {
if (pred(*it2)) {
if (!value) {
value = std::move(*it2);
}
it2 = list.erase(it2);
} else {
++it2;
}
}
if (list.empty()) {
// The key does not exist in level1_, let's remove it from level2_
eraseFromLevel2(it1->first);
it1 = level1_.erase(it1);
} else {
++it1;
}
}
}