diff --git a/portsyncd/linksync.cpp b/portsyncd/linksync.cpp index 41d2715dee5b..20d41b7b8d93 100644 --- a/portsyncd/linksync.cpp +++ b/portsyncd/linksync.cpp @@ -95,20 +95,27 @@ LinkSync::LinkSync(DBConnector *appl_db, DBConnector *state_db) : if (!WarmStart::isWarmStart()) { /* See the comments for g_portSet in portsyncd.cpp */ - for (string port : g_portSet) + for (auto port_iter = g_portSet.begin(); port_iter != g_portSet.end();) { + string port = *port_iter; vector temp; + bool portFound = false; if (m_portTable.get(port, temp)) { for (auto it : temp) { if (fvField(it) == "admin_status") { - g_portSet.erase(port); + port_iter = g_portSet.erase(port_iter); + portFound = true; break; } } } + if (!portFound) + { + ++port_iter; + } } for (idx_p = if_ni; diff --git a/portsyncd/portsyncd.cpp b/portsyncd/portsyncd.cpp index 045922414f82..b34a4a0b4204 100644 --- a/portsyncd/portsyncd.cpp +++ b/portsyncd/portsyncd.cpp @@ -79,10 +79,6 @@ int main(int argc, char **argv) WarmStart::checkWarmStart("portsyncd", "swss"); const bool warm = WarmStart::isWarmStart(); - LinkSync sync(&appl_db, &state_db); - NetDispatcher::getInstance().registerMessageHandler(RTM_NEWLINK, &sync); - NetDispatcher::getInstance().registerMessageHandler(RTM_DELLINK, &sync); - try { NetLink netlink; @@ -102,6 +98,10 @@ int main(int argc, char **argv) } } + LinkSync sync(&appl_db, &state_db); + NetDispatcher::getInstance().registerMessageHandler(RTM_NEWLINK, &sync); + NetDispatcher::getInstance().registerMessageHandler(RTM_DELLINK, &sync); + s.addSelectable(&netlink); s.addSelectable(&portCfg);