From cfe96ef8dc4341f36694258822258543b17637d5 Mon Sep 17 00:00:00 2001 From: Rajkumar Pennadam Ramamoorthy Date: Wed, 29 Jul 2020 08:37:41 +0530 Subject: [PATCH 1/2] [fdborch] Fixed Orchagent crash in FDB flush on port disable. Signed-off-by: Rajkumar Pennadam Ramamoorthy --- orchagent/fdborch.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/orchagent/fdborch.cpp b/orchagent/fdborch.cpp index c4923ef0a0..898443b54c 100644 --- a/orchagent/fdborch.cpp +++ b/orchagent/fdborch.cpp @@ -232,13 +232,14 @@ void FdbOrch::update(sai_fdb_event_t type, update.entry.mac.to_string().c_str(), vlanName.c_str(), update.port.m_alias.c_str()); - for (const auto& itr : m_entries) + for (auto itr = m_entries.begin(); itr != m_entries.end();) { - if (itr.port_name == update.port.m_alias) + if (itr->port_name == update.port.m_alias) { - update.entry.mac = itr.mac; - update.entry.bv_id = itr.bv_id; + update.entry.mac = itr->mac; + update.entry.bv_id = itr->bv_id; update.add = false; + itr++; storeFdbEntryState(update); @@ -247,6 +248,10 @@ void FdbOrch::update(sai_fdb_event_t type, observer->update(SUBJECT_TYPE_FDB_CHANGE, &update); } } + else + { + itr++; + } } } else if (bridge_port_id == SAI_NULL_OBJECT_ID) From fe90aa91a8d535a8d379a3433a74d257461e6d42 Mon Sep 17 00:00:00 2001 From: Rajkumar Pennadam Ramamoorthy Date: Wed, 29 Jul 2020 20:31:17 +0530 Subject: [PATCH 2/2] [fdborch] Fixed Orchagent crash in FDB flush on port disable. Fixed review comments. Signed-off-by: Rajkumar Pennadam Ramamoorthy --- orchagent/fdborch.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/orchagent/fdborch.cpp b/orchagent/fdborch.cpp index 898443b54c..9d587cb55a 100644 --- a/orchagent/fdborch.cpp +++ b/orchagent/fdborch.cpp @@ -234,12 +234,12 @@ void FdbOrch::update(sai_fdb_event_t type, for (auto itr = m_entries.begin(); itr != m_entries.end();) { + auto next_item = std::next(itr); if (itr->port_name == update.port.m_alias) { update.entry.mac = itr->mac; update.entry.bv_id = itr->bv_id; update.add = false; - itr++; storeFdbEntryState(update); @@ -247,11 +247,8 @@ void FdbOrch::update(sai_fdb_event_t type, { observer->update(SUBJECT_TYPE_FDB_CHANGE, &update); } - } - else - { - itr++; } + itr = next_item; } } else if (bridge_port_id == SAI_NULL_OBJECT_ID)