platform-mc: Ensure independent terminus init flow

Modified the terminus initialization flow to ensure that failures in
the initialization of individual EIDs do not impact the processing of
other valid EIDs.
The system continues initializing sensors associated with successfully
initialized terminus, enhancing the robustness of the flow.

Change-Id: Ifbe5306acfb0f944e0ac7a17de701710a92ad551
Signed-off-by: Eric Yang <eric.yang.wiwynn@gmail.com>
diff --git a/platform-mc/terminus_manager.cpp b/platform-mc/terminus_manager.cpp
index 406c70a..d90b6cf 100644
--- a/platform-mc/terminus_manager.cpp
+++ b/platform-mc/terminus_manager.cpp
@@ -186,8 +186,10 @@
 exec::task<int> TerminusManager::discoverMctpTerminusTask()
 {
     std::vector<pldm_tid_t> addedTids;
+
     while (!queuedMctpInfos.empty())
     {
+        bool terminusInitFailed = false;
         if (manager)
         {
             co_await manager->beforeDiscoverTerminus();
@@ -200,15 +202,30 @@
             if (it == termini.end())
             {
                 mctpInfoAvailTable[mctpInfo] = true;
-                co_await initMctpTerminus(mctpInfo);
+                auto rc = co_await initMctpTerminus(mctpInfo);
+                if (rc != PLDM_SUCCESS)
+                {
+                    lg2::error(
+                        "Failed to initialize terminus with EID {EID}, networkId {NETWORK}, response code {RC}.",
+                        "EID", std::get<0>(mctpInfo), "NETWORK",
+                        std::get<3>(mctpInfo), "RC", rc);
+                    mctpInfoAvailTable.erase(mctpInfo);
+                    terminusInitFailed = true;
+                    continue;
+                }
             }
 
             /* Get TID of initialized terminus */
             auto tid = toTid(mctpInfo);
             if (!tid)
             {
+                lg2::error(
+                    "Failed to get TID for terminus with EID {EID}, networkId {NETWORK}.",
+                    "EID", std::get<0>(mctpInfo), "NETWORK",
+                    std::get<3>(mctpInfo));
                 mctpInfoAvailTable.erase(mctpInfo);
-                co_return PLDM_ERROR;
+                terminusInitFailed = true;
+                continue;
             }
             addedTids.push_back(tid.value());
         }
@@ -218,6 +235,11 @@
             co_await manager->afterDiscoverTerminus();
         }
 
+        if (terminusInitFailed)
+        {
+            co_return PLDM_ERROR;
+        }
+
         queuedMctpInfos.pop();
     }