fix: cap gossipPois_ vector growth and add soft frame rate limiter

Cap gossipPois_ at 200 entries (both gossip POI and quest POI paths) to
prevent unbounded memory growth from rapid gossip/quest queries. Add soft
240 FPS frame rate limiter when vsync is off to prevent 100% CPU usage —
sleeps for remaining frame budget when frame completes in under 4ms.
This commit is contained in:
Kelsi 2026-03-20 18:51:05 -07:00
parent 4bd237b654
commit 2b99011cd8
2 changed files with 12 additions and 0 deletions

View file

@ -2539,6 +2539,8 @@ void GameHandler::handlePacket(network::Packet& packet) {
poi.icon = icon;
poi.data = data;
poi.name = std::move(name);
// Cap POI count to prevent unbounded growth from rapid gossip queries
if (gossipPois_.size() >= 200) gossipPois_.erase(gossipPois_.begin());
gossipPois_.push_back(std::move(poi));
LOG_DEBUG("SMSG_GOSSIP_POI: x=", poiX, " y=", poiY, " icon=", icon);
break;
@ -21031,6 +21033,7 @@ void GameHandler::handleQuestPoiQueryResponse(network::Packet& packet) {
poi.name = questTitle.empty() ? "Quest objective" : questTitle;
LOG_DEBUG("Quest POI: questId=", questId, " mapId=", mapId,
" centroid=(", poi.x, ",", poi.y, ") title=", poi.name);
if (gossipPois_.size() >= 200) gossipPois_.erase(gossipPois_.begin());
gossipPois_.push_back(std::move(poi));
}
}