diff --git a/syncd/FlexCounter.cpp b/syncd/FlexCounter.cpp index 0cbd1f95ff36..313fd046833d 100644 --- a/syncd/FlexCounter.cpp +++ b/syncd/FlexCounter.cpp @@ -26,6 +26,7 @@ FlexCounter::FlexCounter( SWSS_LOG_ENTER(); m_enable = false; + m_isDiscarded = false; startFlexCounterThread(); } @@ -819,6 +820,8 @@ void FlexCounter::removeCounterPlugins() m_rifPlugins.clear(); m_priorityGroupPlugins.clear(); m_bufferPoolPlugins.clear(); + + m_isDiscarded = true; } void FlexCounter::addCounterPlugin( @@ -828,6 +831,8 @@ void FlexCounter::addCounterPlugin( SWSS_LOG_ENTER(); + m_isDiscarded = false; + for (auto& fvt: values) { auto& field = fvField(fvt); @@ -901,6 +906,11 @@ bool FlexCounter::isEmpty() return allIdsEmpty() && allPluginsEmpty(); } +bool FlexCounter::isDiscarded() +{ + return isEmpty() && m_isDiscarded; +} + bool FlexCounter::allIdsEmpty() const { SWSS_LOG_ENTER(); diff --git a/syncd/FlexCounter.h b/syncd/FlexCounter.h index d5d256c9af83..3134b19a1af1 100644 --- a/syncd/FlexCounter.h +++ b/syncd/FlexCounter.h @@ -48,6 +48,8 @@ namespace syncd bool isEmpty(); + bool isDiscarded(); + private: void setPollInterval( @@ -405,5 +407,7 @@ namespace syncd std::shared_ptr m_vendorSai; std::string m_dbCounters; + + bool m_isDiscarded; }; } diff --git a/syncd/FlexCounterManager.cpp b/syncd/FlexCounterManager.cpp index cf9e8752d308..134ebc9db1cb 100644 --- a/syncd/FlexCounterManager.cpp +++ b/syncd/FlexCounterManager.cpp @@ -62,7 +62,7 @@ void FlexCounterManager::removeCounterPlugins( fc->removeCounterPlugins(); - if (fc->isEmpty()) + if (fc->isDiscarded()) { removeInstance(instanceId); } @@ -91,7 +91,7 @@ void FlexCounterManager::addCounter( fc->addCounter(vid, rid, values); - if (fc->isEmpty()) + if (fc->isDiscarded()) { removeInstance(instanceId); } @@ -107,7 +107,7 @@ void FlexCounterManager::removeCounter( fc->removeCounter(vid); - if (fc->isEmpty()) + if (fc->isDiscarded()) { removeInstance(instanceId); }