void cleanup()

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;
      }
    }
  }