diff --git a/map/traffic_manager.cpp b/map/traffic_manager.cpp index bc6739433..78dfc7508 100644 --- a/map/traffic_manager.cpp +++ b/map/traffic_manager.cpp @@ -157,7 +157,6 @@ void TrafficManager::Clear() #endif m_messageCache.clear(); m_feedQueue.clear(); - m_allMwmColoring.clear(); m_mwmCache.clear(); // TODO figure out which of the ones below we still need @@ -411,6 +410,12 @@ void TrafficManager::Push(traffxml::TraffFeed feed) } void TrafficManager::PurgeExpiredMessages() +{ + PurgeExpiredMessagesImpl(); + OnTrafficDataUpdate(); +} + +void TrafficManager::PurgeExpiredMessagesImpl() { std::lock_guard lock(m_mutex); LOG(LINFO, ("before:", m_messageCache.size(), "message(s)")); @@ -549,7 +554,7 @@ void TrafficManager::ThreadRoutine() if (steady_clock::now() - lastPurged >= kPurgeInterval) { lastPurged == steady_clock::now(); - PurgeExpiredMessages(); + PurgeExpiredMessagesImpl(); } LOG(LINFO, ("active MWMs changed:", m_activeMwmsChanged, ", poll needed:", m_isPollNeeded)); diff --git a/map/traffic_manager.hpp b/map/traffic_manager.hpp index 337bd4813..2f6536bbc 100644 --- a/map/traffic_manager.hpp +++ b/map/traffic_manager.hpp @@ -219,7 +219,7 @@ public: /** * @brief Purges expired messages from the cache. * - * This method is safe to call from any thread. + * This method is safe to call from any thread, except for the traffic worker thread. */ void PurgeExpiredMessages(); @@ -352,6 +352,15 @@ private: */ bool Poll(); + /** + * @brief Purges expired messages from the cache. + * + * This is the internal conterpart of `PurgeExpiredMessages()`. It is safe to call from any + * thread. Unlike `PurgeExpiredMessages()`, it does not wake the worker thread, making it suitable + * for use on the worker thread. + */ + void PurgeExpiredMessagesImpl(); + /** * @brief Consolidates the feed queue. *