summaryrefslogtreecommitdiffstats
path: root/systemservice/system_manager/server/src/ss_system_manager_error_event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'systemservice/system_manager/server/src/ss_system_manager_error_event.cpp')
-rwxr-xr-xsystemservice/system_manager/server/src/ss_system_manager_error_event.cpp945
1 files changed, 0 insertions, 945 deletions
diff --git a/systemservice/system_manager/server/src/ss_system_manager_error_event.cpp b/systemservice/system_manager/server/src/ss_system_manager_error_event.cpp
deleted file mode 100755
index 131b86a..0000000
--- a/systemservice/system_manager/server/src/ss_system_manager_error_event.cpp
+++ /dev/null
@@ -1,945 +0,0 @@
-/*
- * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup tag_SystemManager
-/// \brief This file provides support for IAT error event logging.
-///
-///////////////////////////////////////////////////////////////////////////////
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <sys/mman.h>
-#include <sys/procfs.h>
-#include <libgen.h>
-#include <spawn.h>
-#include <errno.h>
-#include <sys/timeb.h>
-#include <system_service/ss_system_manager_notifications.h>
-#include <native_service/frameworkunified_framework_if.h>
-#include <native_service/frameworkunified_multithreading.h>
-#include <system_service/ss_services.h>
-#include <system_service/ss_client_names.h>
-#include <system_service/ss_power_service_if.h>
-#include <processlauncher/ProcessLauncher_if.h>
-#include <processlauncher/ss_sm_process_launcher_protocol.h>
-#include <processlauncher/ss_sm_process_launcher.h>
-#include <heartbeat/ss_hb_if.h>
-#include <system_service/ss_heartbeat_service_protocol.h>
-#include <system_service/ss_power_service_notifications.h>
-#include <system_service/ss_power_service_protocol.h>
-#include <stub/ss_diag.h>
-#include <system_service/ss_test_clients.h>
-#include <native_service/ns_np_service_protocol.h>
-#include <native_service/frameworkunified_application.h>
-
-#include <system_service/ss_sm_thread_names.h>
-#include <system_service/ss_templates.h>
-#include <native_service/ns_plogger_if.h>
-#include <native_service/frameworkunified_thread_priority.h>
-#include <native_service/ns_np_service_nor_persistence.h>
-#include <boost/bind.hpp>
-#include <string>
-#include "ss_system_manager.h"
-#include "ss_sm_systemmanagerlog.h"
-#include "ss_sm_default_paths.h"
-#include "ss_sm_version.h"
-
-template<typename C, eFrameworkunifiedStatus (C::*M)(HANDLE)>
- EFrameworkunifiedStatus SysMgrCallback(HANDLE hApp) { // LCOV_EXCL_START 6: Can not set condition
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusFail;
- C * pObj = static_cast<C *>(&CSystemManager::GetInstance());
- if (pObj) {
- l_eStatus = (pObj->*M)(hApp);
- }
- return l_eStatus;
-}
-// LCOV_EXCL_STOP
-
-//******************************************************************************
-void Init_EErrorEventReset_StrMap(std::map<EErrorEventResetType, SS_String> & m_strMap) { // NOLINT
- MAP_ENTRY(m_strMap, eErrorEventResetTypeNone); // LCOV_EXCL_BR_LINE 15: marco defined in ss_templates.h // NOLINT(whitespace/line_length)
- MAP_ENTRY(m_strMap, eErrorEventResetTypeHard); // LCOV_EXCL_BR_LINE 15: marco defined in ss_templates.h // NOLINT(whitespace/line_length)
-}
-class EnumStringMap<EErrorEventResetType, Init_EErrorEventReset_StrMap> m_oEErrorEventResetTypeMap;
-SS_String GetStr(EErrorEventResetType f_enum) { // LCOV_EXCL_START 6: Can not set condition
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- return m_oEErrorEventResetTypeMap.GetStr(f_enum);
-}
-// LCOV_EXCL_STOP
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup ErrorEventInit
-/// This function initializes the error event handling subsystem.
-/// This function MUST be called by System Manager initialization.
-///
-/// \param HANDLE f_hApp AGL FW application handle.
-///
-/// \return Status
-/// EFrameworkunifiedStatus - success or error
-///////////////////////////////////////////////////////////////////////////////
-EFrameworkunifiedStatus CSystemManager::ErrorEventInit(HANDLE f_hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
- Timer *l_pTimer;
-
- m_isPrevErrEventCompleted = TRUE;
- m_errorEventResult = eFrameworkunifiedStatusOK;
- m_errorEventQueueLocked = FALSE;
- m_errorEventCurrentIter = m_errorEventQueue.end();
-
- l_pTimer = &m_errorEventTimers[eSM_ERROR_EVENT_TIMER_LOGGER_START_REQ];
- l_pTimer->Initialize(f_hApp, SS_SM_ERROR_EVENT_TIMER_ID_LOGGER_START_REQ,
- boost::bind(&CSystemManager::OnErrorEventLoggerStartRequestTimeout, this, _1)); // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
-
- l_pTimer = &m_errorEventTimers[eSM_ERROR_EVENT_TIMER_DEBUG_DUMP_RSPN];
- l_pTimer->Initialize(f_hApp, SS_SM_ERROR_EVENT_TIMER_ID_DEBUG_DUMP_RSPN,
- boost::bind(&CSystemManager::OnDebugDumpCompleteTimeout, this, _1)); // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
-
- l_pTimer = &m_errorEventTimers[eSM_ERROR_EVENT_TIMER_BOOT_MICRO_LOG_RSPN];
- l_pTimer->Initialize(f_hApp, SS_SM_ERROR_EVENT_TIMER_ID_BOOT_MICRO_LOG_RSPN,
- boost::bind(&CSystemManager::OnErrorEventBootMicroLogResponseTimeout, this, _1)); // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
-
- l_pTimer = &m_errorEventTimers[eSM_ERROR_EVENT_TIMER_CORE_FILE_POLL];
- l_pTimer->Initialize(f_hApp, SS_SM_ERROR_EVENT_TIMER_ID_CORE_FILE_POLL,
- boost::bind(&CSystemManager::OnErrorEventCoreFilePollTimeout, this, _1)); // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_eStatus);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup ErrorEventEnqueue
-/// Conditional queue error events for processing by the error event state
-/// machine.
-///
-/// \param f_hApp Handle to AGL application.
-///
-/// \param f_eventType Error event type.
-///
-/// \param f_moduleQueueName Error event trigger module queue name.
-///
-/// \param f_resetType Error event reset type (none, hard).
-///
-/// \param f_loggingInfo Logging information if applicable (optional).
-///
-/// \return EFrameworkunifiedStatus
-/// Success ==> eFrameworkunifiedStatusOK
-/// Failure ==> Other values
-///////////////////////////////////////////////////////////////////////////////
-EFrameworkunifiedStatus CSystemManager::ErrorEventEnqueue(HANDLE f_hApp,
- EErrorEventType f_eventType, std::string &f_moduleQueueName,
- EErrorEventResetType f_resetType, const SMLoggingInfo &f_loggingInfo) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
- ERROR_EVENT_INFO l_errorEventInfo;
- ERROR_EVENT_QUEUE_ITER l_errorEventIter;
- ERROR_EVENT_QUEUE_RET l_retVal;
- BOOL isErrorReset = FALSE;
-
- if (eErrorEventResetTypeHard == f_resetType) {
- // Forced reset if shutdown process is not completed after Reboot requesting
- m_GroupLaunchTimer->StartTimer(
- m_aTimerIDs[eSM_TIMER_SHUTDOWN_COMPLETE_MONITOR],
- SM_SHUTDOWN_COMPLETE_MONITOR_TIMEOUT, 0, 0, 0);
-
- switch (f_loggingInfo.resetReason) {
- case e_SS_SM_CPU_RESET_REASON_GENERIC_ERR:
- case e_SS_SM_CPU_RESET_REASON_DSP_ERR:
- isErrorReset = TRUE;
- break;
- default:
- break;
- }
- // LCOV_EXCL_START 6:This variable cannot be modified by external API
- if ((m_ResetCount > SS_SM_ERR_NAVI_RESET_LIMIT) && isErrorReset) {
- // LCOV_EXCL_BR_STOP
- // LCOV_EXCL_START 6:This variable cannot be modified by external API (evaluated only initial value)
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- fprintf(stderr,
- "SS_SysManager/%s:will NAVIDET as continuous error(%d) \n", __FUNCTION__, m_ResetCount);
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "will NAVIDET as continuous error(%d)", m_ResetCount);
- m_pfStopCompleteHandler = (SysMgrCallback<CSystemManager, &CSystemManager::perform_force_reset>);
- // LCOV_EXCL_STOP
- }
- }
-
- if (TRUE == m_errorEventQueueLocked) {
- l_eStatus = eFrameworkunifiedStatusAccessError;
- FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__,
- " Warning. The Error Event Queue has been locked. No further items may be enqueued. System reset pending."); // LCOV_EXCL_BR_LINE 15: marco defined in ns_logger_if.h // NOLINT(whitespace/line_length)
- } else {
- GetTimeStamp(l_errorEventInfo.m_eventEnqueueTimeStamp);
-
- l_errorEventInfo.m_moduleQueueName = f_moduleQueueName;
- l_errorEventInfo.m_eventType = f_eventType;
- l_errorEventInfo.m_errorEventResetType = f_resetType;
- l_errorEventInfo.m_loggingInfo = f_loggingInfo;
- l_errorEventInfo.m_prio = eErrorEventPrioDefault; // Make Prios of all ErrorEvent first-win as default
- // It needs to add eErrorEventPrioxxx properly if design modification about priority required
-
- if (eErrorEventResetTypeNone != f_resetType) {
- FRAMEWORKUNIFIEDLOG(ZONE_STATE, __FUNCTION__, " System will reset after logging");
- }
-
- l_retVal = m_errorEventQueue.insert(l_errorEventInfo);
- if (FALSE == l_retVal.second) {
- std::string l_errorEventName = GetStr(l_errorEventInfo.m_eventType);
- TEXT(__FUNCTION__, // LCOV_EXCL_BR_LINE 15: marco defined in ns_logger_if.h // NOLINT(whitespace/line_length)
- " ERROR EVENT: %s is already queued or is in progress. Event dropped.", // LCOV_EXCL_BR_LINE 15: marco defined in ns_logger_if.h // NOLINT(whitespace/line_length)
- l_errorEventName.c_str()); // LCOV_EXCL_BR_LINE 15: marco defined in ns_logger_if.h // NOLINT(whitespace/line_length)
- }
-
- l_eStatus = ErrorEventProcessNext(f_hApp);
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus, "ErrorEventProcessNext()"); // LCOV_EXCL_BR_LINE 15: marco defined in ss_system_manager.h // NOLINT(whitespace/line_length)
- }
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_eStatus);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup PerformResetAfterLogging
-/// perform CPU reset after logging complete
-///
-/// \param f_hApp Handle to AGL application.
-/// f_eCpuResetReason CPU reset reason
-/// f_messageStr Error message string
-///
-/// \return EFrameworkunifiedStatus
-/// Success ==> eFrameworkunifiedStatusOK
-/// Failure ==> Other values
-///
-///
-///////////////////////////////////////////////////////////////////////////////
-EFrameworkunifiedStatus CSystemManager::PerformResetAfterLogging(HANDLE f_hApp,
- ESMCpuResetReason f_eCpuResetReason, std::string f_messageStr) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
-
- l_eStatus = PerformCpuReset(f_hApp, f_eCpuResetReason, f_messageStr);
- LOG_STATUS_REC_HIST_IF_ERRORED(l_eStatus, "PerformCpuReset()"); // LCOV_EXCL_BR_LINE 15: marco defined in ss_system_manager.h // NOLINT(whitespace/line_length)
- // LCOV_EXCL_BR_START 200: Can not satisfy the condition for calling from caller
- if (eFrameworkunifiedStatusOK != l_eStatus) {
- // LCOV_EXCL_BR_STOP
- // LCOV_EXCL_START 200: Can not satisfy the condition for calling from caller
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- SS_ASERT_LOG(0, "PerformCpuReset() : %d", l_eStatus);
- // Erasing ErrorEvent only if resetting process is failed
- m_errorEventQueue.erase(m_errorEventCurrentIter); // Erase last processed event.
- // LCOV_EXCL_STOP
- } else {
- m_errorEventQueueLocked = TRUE; // Permanent lock until post reset.
- m_errorEventQueue.clear(); // Drop queued events.
- SendDeferMsg(f_hApp);
- }
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_eStatus);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup ErrorEventProcessNext
-/// Process the next error event from error event queue.
-///
-/// \param f_hApp Handle to AGL application.
-///
-/// \return EFrameworkunifiedStatus
-/// Success ==> eFrameworkunifiedStatusOK
-/// Failure ==> Other values
-///
-/// \Notes (1) Removal from the queue occurs AFTER the entry has been processed
-/// AND just before the NEXT entry is to be obtained. Therefore,
-/// the first item enqueued MUST not be removed since it has not
-/// been processed. This is ensured by setting the iterator to END
-/// during module initialization. After processing the first event,
-/// the iterator will no longer be END until all events have been
-/// processed.
-///////////////////////////////////////////////////////////////////////////////
-EFrameworkunifiedStatus CSystemManager::ErrorEventProcessNext(HANDLE f_hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
- ERROR_EVENT_QUEUE_ITER l_errorEventIter;
- SMErrorEventNtfData l_errorEventNtfData;
-
- if (TRUE == m_isPrevErrEventCompleted) { // Remove last completed item from front of queue.
- // See Note #1.
- if ((0 != m_errorEventQueue.size()) &&
- (m_errorEventQueue.end() != m_errorEventCurrentIter)) {
- // Completed logging by ErrorEvent
- switch (m_errorEventCurrentIter->m_errorEventResetType) {
- case eErrorEventResetTypeNone:
- switch (m_errorEventCurrentIter->m_eventType) {
- case eErrorEventTypeInterfaceunifiedEmmcLogs:
- case eErrorEventTypeUserInvokedClearLogs:
- if (eFrameworkunifiedStatusOK == m_errorEventResult) {
- if (PowerHalSetResetInfo(AGL_ERRLOG_COUNTER, 0)) {
- // Logging only.
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- "Could not reset AGL_ERRLOG_COUNTER");
- }
- }
- break;
- default:
- break;
- }
-
- if (eErrorEventTypeInterfaceunifiedEmmcLogs == m_errorEventCurrentIter->m_eventType) {
- HANDLE hSession = FrameworkunifiedMcOpenSender(f_hApp,
- m_errorEventCurrentIter->m_moduleQueueName.c_str());
-
- if (hSession == NULL) { // LCOV_EXCL_BR_LINE 4: NSFW error case
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- SS_ASERT(0); // LCOV_EXCL_BR_LINE 15: marco defined in ss_templates.h // NOLINT(whitespace/line_length)
- // LCOV_EXCL_STOP
- } else {
- if (eFrameworkunifiedStatusOK // LCOV_EXCL_BR_LINE 4: NSFW error case
- != FrameworkunifiedSendMsg(hSession,
- SS_SM_ERROR_EVENT_INTERFACEUNIFIED_EMMC_LOGS_RSPN,
- sizeof(m_errorEventResult),
- &m_errorEventResult)) {
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- SS_ASERT(0); // LCOV_EXCL_BR_LINE 15: marco defined in ss_templates.h // NOLINT(whitespace/line_length)
- // LCOV_EXCL_STOP
- }
- if (eFrameworkunifiedStatusOK != FrameworkunifiedMcClose(hSession)) { // LCOV_EXCL_BR_LINE 4: NSFW error case
- // LCOV_EXCL_START 4: NSFW error case
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- SS_ASERT(0); // LCOV_EXCL_BR_LINE 15: marco defined in ss_templates.h // NOLINT(whitespace/line_length)
- // LCOV_EXCL_STOP
- }
- }
- }
- m_errorEventQueue.erase(m_errorEventCurrentIter); // Erase last processed event.
- break;
- case eErrorEventResetTypeHard:
- TEXT(__FUNCTION__, "ERROR EVENT: Hard reset required for previously processed error event." // LCOV_EXCL_BR_LINE 15: marco defined in ns_logger_if.h // NOLINT(whitespace/line_length)
- "Initiating reset and flushing logging queue."); // LCOV_EXCL_BR_LINE 15: marco defined in ns_logger_if.h // NOLINT(whitespace/line_length)
-
- if (eFrameworkunifiedStatusOK != m_errorEventResult) {
- // Logging at next launching by setting L to NaviDet if logging failed before rebooting
- fprintf(stderr,
- "SS_SysManager/%s:will NAVIDET as LOG save failed\n", __FUNCTION__);
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- "will NAVIDET as LOG save failed");
- m_pfStopCompleteHandler = (SysMgrCallback<CSystemManager,
- &CSystemManager::perform_force_reset>);
- }
-
- if ((m_errorEventCurrentIter->m_loggingInfo.resetReason == e_SS_SM_CPU_RESET_REASON_CRITICAL_ERR) ||
- (m_errorEventCurrentIter->m_loggingInfo.resetReason == e_SS_SM_CPU_RESET_REASON_GENERIC_ERR) ||
- (m_errorEventCurrentIter->m_loggingInfo.resetReason == e_SS_SM_CPU_RESET_REASON_DSP_ERR) ||
- (m_errorEventCurrentIter->m_loggingInfo.resetReason == e_SS_SM_CPU_RESET_REASON_USER_FORCE_RESET)) {
- BOOL l_user_reset = FALSE;
- if (m_errorEventCurrentIter->m_loggingInfo.resetReason == e_SS_SM_CPU_RESET_REASON_USER_FORCE_RESET) {
- l_user_reset = TRUE;
- }
- m_ResetFactor = GetResetFactor(m_errorEventCurrentIter->m_moduleQueueName.c_str(), l_user_reset);
- }
-
- l_eStatus = PerformResetAfterLogging(f_hApp,
- m_errorEventCurrentIter->m_loggingInfo.resetReason,
- m_errorEventCurrentIter->m_loggingInfo.messageStr); // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
- LOG_STATUS_REC_HIST_IF_ERRORED(l_eStatus, // LCOV_EXCL_BR_LINE 15: marco defined in ss_system_manager.h // NOLINT(whitespace/line_length)
- "PerformResetAfterLogging()"); // LCOV_EXCL_BR_LINE 15: marco defined in ss_system_manager.h // NOLINT(whitespace/line_length)
-
- break;
- // LCOV_EXCL_START 6:Can not satisfy condition to branch
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- default:
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error. Unknown reset type encountered: 0x%X/%d. No action taken.",
- m_errorEventCurrentIter->m_errorEventResetType,
- m_errorEventCurrentIter->m_errorEventResetType);
- break;
- // LCOV_EXCL_STOP
- }
- }
-
- // Check if a new work item exists.
- if (0 != m_errorEventQueue.size()) {
- // ErrorEvent startup process
- m_errorEventCurrentIter = m_errorEventQueue.begin();
-
- l_errorEventNtfData.EventType = m_errorEventCurrentIter->m_eventType;
-
- if (eErrorEventResetTypeHard == m_errorEventCurrentIter->m_errorEventResetType) {
- l_errorEventNtfData.isNeedReboot = TRUE;
- } else {
- l_errorEventNtfData.isNeedReboot = FALSE;
- }
-
- // Check BufferSize
- size_t modl_len = sizeof(l_errorEventNtfData.ModuleName) - 1;
-
- // SS Logger uses the l_errorEventNtfData.ModuleName as the LOGGERSERVICE_EMMC_LOGS and
- // EEL_EXPORT destination path. eErrorEventTypeDiagEvent sends the destination path.
- // For all other event types, the binary name is sent to logger.
- // LCOV_EXCL_BR_START 6: Because the applicable variable cannot be changed from the external API (only evaluated by the initial value)
- if ((eErrorEventTypeInterfaceunifiedEmmcLogs
- == m_errorEventCurrentIter->m_eventType) ||
- (eErrorEventTypeEelExport
- == m_errorEventCurrentIter->m_eventType) ||
- (eErrorEventTypeDiagEvent
- == m_errorEventCurrentIter->m_eventType)) {
- // LCOV_EXCL_BR_STOP
- strncpy(l_errorEventNtfData.ModuleName,
- m_errorEventCurrentIter->m_loggingInfo.path.c_str(),
- sizeof(l_errorEventNtfData.ModuleName) - 1);
-
- size_t path_len = strlen(m_errorEventCurrentIter->m_loggingInfo.path.c_str());
- if (path_len > modl_len) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- "Input buffer size over. input : %ld, enable : %ld",
- path_len, modl_len);
- }
- l_errorEventNtfData.ModuleName[sizeof(l_errorEventNtfData.ModuleName) - 1] = 0;
- } else {
- strncpy(l_errorEventNtfData.ModuleName,
- m_errorEventCurrentIter->m_loggingInfo.suffixStr.c_str(),
- sizeof(l_errorEventNtfData.ModuleName) - 1);
- }
-
- // When the Reboot process is started during the execution of the LOG save sequence, an undefined value was set
- // in m_errorEventCurrentIter. Therefore, the Reboot start timing due to an error in SS_Loger was changed from
- // the time of ErrorEvent queuing to the time of dequeuing.
-
- // LCOV_EXCL_BR_START 6: Because the following conditions cannot be satisfied when called from an external API
- if ((SERVICE_LOGGER == m_errorEventCurrentIter->m_moduleQueueName)
- && ((eErrorEventTypeProcessCrash
- == m_errorEventCurrentIter->m_eventType)
- || (eErrorEventTypeProcessExit
- == m_errorEventCurrentIter->m_eventType)
- || (eErrorEventTypeHeartBeatFailure
- == m_errorEventCurrentIter->m_eventType)
- || (eErrorEventTypeModConnFailed
- == m_errorEventCurrentIter->m_eventType)
- || (eErrorEventTypeStartRespFailed
- == m_errorEventCurrentIter->m_eventType))) {
- // LCOV_EXCL_BR_STOP
- // LCOV_EXCL_START 6: Because the following conditions cannot be satisfied when called from an external API
- // Note: If logger crashes, a core file will exist.
- std::string l_hmiDispStr;
- l_hmiDispStr = SERVICE_LOGGER;
- if (eErrorEventResetTypeNone != m_errorEventCurrentIter->m_errorEventResetType) {
- l_hmiDispStr += " - Shutting down, check for core file.";
-
- // Since LOG save cannot be performed when an SSL error is detected, the LOG is saved at the next startup
- // by rebooting with NaviDet = L after completion of the process.
- fprintf(stderr, "SS_SysManager/%s:will NAVIDET as SSL dead\n", __FUNCTION__);
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "will NAVIDET as SSL dead");
- m_pfStopCompleteHandler = (SysMgrCallback<CSystemManager,
- &CSystemManager::perform_force_reset>);
-
- m_ResetFactor = GetResetFactor(SERVICE_LOGGER, FALSE);
-
- l_eStatus = PerformResetAfterLogging(f_hApp,
- e_SS_SM_CPU_RESET_REASON_GENERIC_ERR);
- LOG_STATUS_REC_HIST_IF_ERRORED(l_eStatus, "PerformResetAfterLogging()");
- } else {
- l_hmiDispStr += " - Check for core file.";
- }
-
- SMErrorEventNtfData l_errorEventNtfData;
- l_errorEventNtfData.EventType = m_errorEventCurrentIter->m_eventType;
- l_errorEventNtfData.isNeedReboot = FALSE;
- snprintf(l_errorEventNtfData.ModuleName,
- sizeof(l_errorEventNtfData.ModuleName), "%s",
- l_hmiDispStr.c_str());
-
- l_eStatus = FrameworkunifiedPublishEvent(f_hApp, // Show indication on HMI.
- SS_SM_EVENT_ERROR,
- NULL, &l_errorEventNtfData, sizeof(l_errorEventNtfData));
-
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus,
- "FrameworkunifiedPublishEvent(SS_SM_EVENT_ERROR)");
- } else if (m_errorEventCurrentIter->m_eventType == eErrorEventTypeModuleInvokedResetRequest
- && (m_errorEventCurrentIter->m_loggingInfo.resetReason == e_SS_SM_CPU_RESET_REASON_NORMAL
- || m_errorEventCurrentIter->m_loggingInfo.resetReason == e_SS_SM_CPU_RESET_REASON_DATA_RESET)) {
- l_eStatus = PerformResetAfterLogging(f_hApp,
- m_errorEventCurrentIter->m_loggingInfo.resetReason,
- m_errorEventCurrentIter->m_loggingInfo.messageStr); // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
- LOG_STATUS_REC_HIST_IF_ERRORED(l_eStatus, "PerformResetAfterLogging()"); // LCOV_EXCL_BR_LINE 15: marco defined in ss_system_manager.h // NOLINT(whitespace/line_length)
- } else {
- BOOL bIsNeedLogging = TRUE;
-
- {
- UI_32 l_ErrLogCount = 0;
- if (PowerHalGetResetInfo(AGL_ERRLOG_COUNTER, &l_ErrLogCount)) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- "Could not get AGL_ERRLOG_COUNTER form power_hal, assume to 0.");
- l_ErrLogCount = 0;
- }
-
- {
- if ((l_ErrLogCount >= SS_SM_ERR_LOGGING_LIMIT)
- && (eErrorEventResetTypeHard == m_errorEventCurrentIter->m_errorEventResetType)) {
- fprintf(stderr, "SS_SysManager/%s:Skip Logging by continuous error \n", __FUNCTION__);
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__, "Skip Logging by continuous error ");
-
- m_ResetFactor = PSM_FACTOR_AGL_WITH_HISTORY;
-
- l_eStatus =
- PerformResetAfterLogging(f_hApp,
- m_errorEventCurrentIter->m_loggingInfo.resetReason,
- m_errorEventCurrentIter->m_loggingInfo.messageStr);
- LOG_STATUS_REC_HIST_IF_ERRORED(l_eStatus, "PerformResetAfterLogging()");
- bIsNeedLogging = FALSE;
- } else if (eErrorEventResetTypeHard
- == m_errorEventCurrentIter->m_errorEventResetType) {
- l_ErrLogCount++;
- if (PowerHalSetResetInfo(AGL_ERRLOG_COUNTER, l_ErrLogCount)) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- "Could not set AGL_ERRLOG_COUNTER to power_hal.");
- }
- }
- }
- }
-
- if (bIsNeedLogging) {
- m_isPrevErrEventCompleted = FALSE;
- m_errorEventResult = eFrameworkunifiedStatusOK;
- BOOL result =
- m_errorEventTimers[eSM_ERROR_EVENT_TIMER_LOGGER_START_REQ].Start(
- SS_ERROR_EVENT_START_REQ_TO_SEC, 0, 0, 0);
- if (FALSE == result) { // LCOV_EXCL_BR_LINE 6: Because the applicable variable cannot be changed from the external API (only evaluated by the initial value)
- // LCOV_EXCL_START 6: Because the applicable variable cannot be changed from the external API (only evaluated by the initial value)
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error. Failed to start timer eSM_ERROR_EVENT_TIMER_LOGGER_START_REQ.");
- // LCOV_EXCL_STOP
- }
-
- l_eStatus = FrameworkunifiedPublishEvent(f_hApp,
- SS_SM_EVENT_ERROR_TO_SSL,
- NULL, &l_errorEventNtfData,
- sizeof(l_errorEventNtfData));
-
- if (l_eStatus != eFrameworkunifiedStatusOK) { // LCOV_EXCL_BR_LINE 4: NSFW error case.
- // LCOV_EXCL_START 4: NSFW error case.
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__,
- " FrameworkunifiedPublishEvent(SS_SM_EVENT_ERROR_TO_SSL, "
- "module name (optional): '%s', "
- "event type: %d) returned '%d'/'%s'",
- l_errorEventNtfData.ModuleName,
- l_errorEventNtfData.EventType, l_eStatus,
- GetStr(l_eStatus).c_str());
- // LCOV_EXCL_STOP 4: NSFW error case.
- }
- }
- }
- }
-
- // If Reboot has been started up to this point, m_errorEventQueue is cleared and checking is performed at the end because m_errorEventQueue is cleared.
- if (0 == m_errorEventQueue.size()) {
- FRAMEWORKUNIFIEDLOG(ZONE_INFO, __FUNCTION__,
- " Info. Error Event queue empty. Error logging complete.");
- m_errorEventCurrentIter = m_errorEventQueue.end(); // Invalidate iterator in case of spurious events.
- SendDeferMsg(f_hApp);
- }
- }
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_eStatus);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup OnLoggingStartRequestFromSL
-/// This function gets called when System Logger initiates artifact
-/// collection for a trigger source that originates within System
-/// Logger or as a result of System Manager raising a logging
-/// event notification to System Logger.
-///
-/// \param [in] hApp
-/// HANDLE - Handle of the Client Application
-///
-/// \return Status
-/// EFrameworkunifiedStatus - success or error
-///////////////////////////////////////////////////////////////////////////////
-EFrameworkunifiedStatus CSystemManager::OnLoggingStartRequest(HANDLE f_hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
- ModuleLaunchListIter l_ModuleListIter;
- HANDLE l_hLoggerServiceSession;
- EErrorEventType l_eventType;
- SMErrorEventNtfData l_errorEventNtfData;
-
- m_errorEventTimers[eSM_ERROR_EVENT_TIMER_LOGGER_START_REQ].Stop();
-
- INTERFACEUNIFIEDLOG_RECEIVED_FROM(f_hApp);
-
- if (eFrameworkunifiedStatusOK
- != (l_eStatus = ReadMsg < EErrorEventType > (f_hApp, l_eventType))) {
- LOG_ERROR("ReadMsg()");
- } else {
- if (0 == m_errorEventQueue.size()) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error. Logging start request received for event type: %d/'%s', "
- "but the logging queue is empty.!", l_eventType,
- GetStr(l_eventType).c_str());
- l_eStatus = eFrameworkunifiedStatusFail;
- } else if (m_errorEventCurrentIter == m_errorEventQueue.end()) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error. Logging start request received for event type: %d/'%s', "
- "but the current event iterator is invalid.",
- l_eventType, GetStr(l_eventType).c_str());
- l_eStatus = eFrameworkunifiedStatusFail;
- } else if (m_errorEventCurrentIter->m_eventType != l_eventType) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error. Logging start request received for event type: %d/'%s', "
- "but current work item is for event type: %d/'%s'.",
- l_eventType, GetStr(l_eventType).c_str(),
- m_errorEventCurrentIter->m_eventType,
- GetStr(m_errorEventCurrentIter->m_eventType).c_str());
- l_eStatus = eFrameworkunifiedStatusFail;
- } else {
- l_errorEventNtfData.EventType = l_eventType;
- l_errorEventNtfData.isNeedReboot = FALSE;
-
- // For boot micro reset, customize the string as per the reset reason.
- if (l_eventType == eErrorEventTypeBootMicroReset) {
- switch (m_BootMicroResetReason) {
- case SS_SM_BOOT_MICRO_RESET_REASON_SELF_RESET:
- (void) snprintf(l_errorEventNtfData.ModuleName,
- sizeof(l_errorEventNtfData.ModuleName),
- "Boot Micro Reset. Reason: %d, Self Reset",
- m_BootMicroResetReason);
- break;
-
- case SS_SM_BOOT_MICRO_RESET_REASON_USER_FORCE_RESET: // User Force Reset timeout.
- (void) snprintf(l_errorEventNtfData.ModuleName,
- sizeof(l_errorEventNtfData.ModuleName),
- "Boot Micro Reset. Reason: %d, UFR Timeout",
- m_BootMicroResetReason);
- break;
-
- case SS_SM_BOOT_MICRO_RESET_REASON_DSP_RESET:
- (void) snprintf(l_errorEventNtfData.ModuleName,
- sizeof(l_errorEventNtfData.ModuleName),
- "Boot Micro Reset. Reason: %d, DSP Reset",
- m_BootMicroResetReason);
- break;
-
- case SS_SM_BOOT_MICRO_RESET_REASON_HB_TIMEOUT:
- (void) snprintf(l_errorEventNtfData.ModuleName,
- sizeof(l_errorEventNtfData.ModuleName),
- "Boot Micro Reset. Reason: %d, HB Timeout",
- m_BootMicroResetReason);
- break;
-
- default:
- (void) snprintf(l_errorEventNtfData.ModuleName,
- sizeof(l_errorEventNtfData.ModuleName),
- "Boot Micro Reset. Reason: %d, Unknown",
- m_BootMicroResetReason);
- break;
- }
- } else {
- // All other error event types format =
- // Binary Name <circumstantial> PID: TID: Additional info: </circumstantial>
- std::string l_hmiDispStr = ErrorEventCreateHmiDisplayString();
-
- (void) snprintf(l_errorEventNtfData.ModuleName,
- sizeof(l_errorEventNtfData.ModuleName), "%s",
- l_hmiDispStr.c_str());
- }
-
- l_eStatus = FrameworkunifiedPublishEvent(f_hApp, SS_SM_EVENT_ERROR, // To HMI
- NULL, &l_errorEventNtfData, sizeof(l_errorEventNtfData));
-
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus,
- "FrameworkunifiedPublishEvent(SS_SM_EVENT_ERROR)");
- }
-
- if (eFrameworkunifiedStatusOK
- != (l_eStatus = GetModuleIterator(SERVICE_LOGGER, l_ModuleListIter))) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error: GetModuleIterator(%s) errored: %d/'%s'",
- SERVICE_LOGGER, l_eStatus, GetStr(l_eStatus).c_str());
- } else {
- l_hLoggerServiceSession = l_ModuleListIter->hsession;
-
- l_eStatus = FrameworkunifiedSendMsg(l_hLoggerServiceSession,
- SS_SM_ERROR_EVENT_LOGGING_START_RSPN, 0, NULL);
-
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus,
- "FrameworkunifiedSendMsg(SS_SM_ERROR_EVENT_LOGGING_START_RSPN)");
- }
- }
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_eStatus);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup OnErrorEventLoggerStartRequestTimeout
-///
-/// \brief This function is called if System Logger fails to respond in a
-/// timely fashion to the published logger start request event
-/// SS_SM_EVENT_ERROR_TO_SSL. See OnLoggingStartRequest() which
-/// is the expected path should the timer period NOT expire.
-///
-/// \param [in] hApp
-/// HANDLE - Handle of the Client Application
-///
-/// \return Status
-/// EFrameworkunifiedStatus - success or error
-///////////////////////////////////////////////////////////////////////////////
-EFrameworkunifiedStatus CSystemManager::OnErrorEventLoggerStartRequestTimeout(HANDLE f_hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
- SMErrorEventNtfData l_errorEventNtfData;
-
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error. Logger failed to respond to message SS_SM_EVENT_ERROR_TO_SSL in a timely fashion. Logging aborted.");
-
- // Publish to HMI even if the error event will not be processed.
- // In this way, developers can be made aware of the error condition
- // and determine why logging did not proceed as expected.
- if (m_errorEventCurrentIter != m_errorEventQueue.end()) {
- l_errorEventNtfData.EventType = m_errorEventCurrentIter->m_eventType;
- l_errorEventNtfData.isNeedReboot = FALSE;
-
- std::string l_hmiDispStr = ErrorEventCreateHmiDisplayString();
- snprintf(l_errorEventNtfData.ModuleName,
- sizeof(l_errorEventNtfData.ModuleName), "%s.", l_hmiDispStr.c_str());
-
- l_eStatus = FrameworkunifiedPublishEvent(f_hApp, SS_SM_EVENT_ERROR, // To HMI
- NULL, &l_errorEventNtfData, sizeof(l_errorEventNtfData)); // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
-
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus, "FrameworkunifiedPublishEvent(SS_SM_EVENT_ERROR)"); // LCOV_EXCL_BR_LINE 15: marco defined in ss_system_manager.h // NOLINT(whitespace/line_length)
- }
-
- m_isPrevErrEventCompleted = TRUE;
- m_errorEventResult = eFrameworkunifiedStatusFail;
- l_eStatus = ErrorEventProcessNext(f_hApp);
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus, "ErrorEventProcessNext()"); // LCOV_EXCL_BR_LINE 15: marco defined in ss_system_manager.h // NOLINT(whitespace/line_length)
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_eStatus);
-}
-
-EFrameworkunifiedStatus CSystemManager::OnErrorEventLoggingComplete(HANDLE f_hApp) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
- HANDLE l_hLoggerServiceSession;
- ModuleLaunchListIter l_ModuleListIter;
-
- // If logger does not send a logging start and instead immediately
- // sends a logging complete response, then the start timer must be
- // stopped to prevent a start response timeout from occuring.
- m_errorEventTimers[eSM_ERROR_EVENT_TIMER_LOGGER_START_REQ].Stop();
-
- m_errorEventResult = eFrameworkunifiedStatusFail;
- if (sizeof(m_errorEventResult) != FrameworkunifiedGetMsgLength(f_hApp)) {
- LOG_ERROR("DataSize mismatch");
- } else if (eFrameworkunifiedStatusOK
- != (l_eStatus = FrameworkunifiedGetMsgDataOfSize(f_hApp, &m_errorEventResult,
- sizeof(m_errorEventResult), eSMRRelease))) {
- LOG_ERROR("FrameworkunifiedGetMsgDataOfSize()");
- } else {
- FRAMEWORKUNIFIEDLOG(ZONE_STATE, __FUNCTION__, "m_errorEventResult = %d", m_errorEventResult);
- }
- m_isPrevErrEventCompleted = TRUE;
-
- if (eFrameworkunifiedStatusOK
- != (l_eStatus = GetModuleIterator(SERVICE_LOGGER, l_ModuleListIter))) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error: GetModuleIterator(%s) errored: %d/'%s'",
- SERVICE_LOGGER, l_eStatus, GetStr(l_eStatus).c_str());
- } else {
- l_hLoggerServiceSession = l_ModuleListIter->hsession;
-
- l_eStatus = FrameworkunifiedSendMsg(l_hLoggerServiceSession,
- SS_SM_ERROR_EVENT_LOGGING_COMPLETE_RSPN, 0, NULL);
-
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus,
- "FrameworkunifiedSendMsg(SS_SM_ERROR_EVENT_LOGGING_START_RSPN)");
- }
-
- FRAMEWORKUNIFIEDLOG(ZONE_STATE, __FUNCTION__, " Info. Done processing error event %s.",
- GetStr(m_errorEventCurrentIter->m_eventType).c_str());
-
- l_eStatus = ErrorEventProcessNext(f_hApp);
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus, "ErrorEventProcessNext()");
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_eStatus);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup ActOnModuleFailure
-/// This function is called to take appropriate action of the failure
-/// reported by heart beat or crash detector. Attributes set in
-/// Launch configuration file are considered while taking action
-/// on the failed module.
-///
-/// \param f_hApp AGL FW application handle.
-/// f_moduleName Failed module name.
-/// f_refSoftResetRequired Return parameter indicating if a
-/// soft reset will be required.
-/// \return Status
-/// EFrameworkunifiedStatus - success or error
-///////////////////////////////////////////////////////////////////////////////
-const CHAR RestartModule[] = "me";
-
-EFrameworkunifiedStatus CSystemManager::ActOnModuleFailure(HANDLE f_hApp,
- SS_String f_moduleName, BOOL &f_refResetRequired) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- ModuleLaunchListIter l_ModuleListIter;
- EFrameworkunifiedStatus l_eStatus = eFrameworkunifiedStatusOK;
- ESMPLThreadCommandIds l_PLCmd = ePLThrdCmd_NONE;
- SS_String l_PLCmdStr = "";
-
- f_refResetRequired = FALSE;
-
- l_eStatus = GetModuleIterator(f_moduleName.c_str(), l_ModuleListIter);
- if (l_eStatus != eFrameworkunifiedStatusOK) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error: Module %s not found in Group Launch Map", f_moduleName.c_str());
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (eFrameworkunifiedStatusDbRecNotFound);
- }
-
- // LCOV_EXCL_BR_START 6: Because the condition cannot be set
- if (eFrameworkunifiedStatusOK
- != (l_eStatus = RemoveModuleEntryFromHB(f_hApp,
- l_ModuleListIter->name.c_str()))) {
- // LCOV_EXCL_BR_STOP
- // LCOV_EXCL_START 6: Because the condition cannot be set
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error: RemoveModuleEntryFromHB(%s) errored: %d/'%s'",
- l_ModuleListIter->name.c_str(), l_eStatus,
- GetStr(l_eStatus).c_str());
- // LCOV_EXCL_STOP
- }
-
- if (TRUE == l_ModuleListIter->critical
- && (l_ModuleListIter->relaunch_count >= l_ModuleListIter->retry_cnt)) {
- FRAMEWORKUNIFIEDLOG(ZONE_ERR, __FUNCTION__,
- " Error: Critical module '%s' re-launch counter exceeded limit (%d).",
- l_ModuleListIter->name.c_str(), l_ModuleListIter->retry_cnt);
-
- l_ModuleListIter->SetModuleState(MODULE_STATE_SKIPPED);
-
- // Module has crossed re-launched limit and is not going to be re-launched.
- // It must however still be terminated.
- l_PLCmd = ePLThrdCmd_TERMINATE_MODULE_REQST;
- l_PLCmdStr = "ePLThrdCmd_TERMINATE_MODULE_REQST";
-
- // Module is critical. Restart system.
- f_refResetRequired = TRUE;
- // Restart required?
- } else if (0 == std::strcmp(l_ModuleListIter->restart.c_str(), RestartModule)) { // LCOV_EXCL_BR_LINE 6: Because the condition cannot be set // NOLINT(whitespace/line_length)
- // LCOV_EXCL_START 6: Because the condition cannot be set
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_STATE, __FUNCTION__, "Module: %s, relaunch_count: %d",
- l_ModuleListIter->name.c_str(),
- l_ModuleListIter->relaunch_count);
-
- if (l_ModuleListIter->relaunch_count < l_ModuleListIter->retry_cnt) {
- SS_String l_ModulePath = (m_BinaryFilesPath + l_ModuleListIter->path);
-
- FRAMEWORKUNIFIEDLOG(ZONE_STATE, __FUNCTION__,
- " Requesting ReLaunch of '%s' '%s'",
- l_ModuleListIter->name.c_str(), l_ModulePath.c_str());
-
- l_PLCmd = ePLThrdCmd_RELAUNCH_MODULE_REQST;
- l_PLCmdStr = "ePLThrdCmd_RELAUNCH_MODULE_REQST";
- l_ModuleListIter->relaunch_count++;
- l_ModuleListIter->relaunch_status = RelaunchErr;
- } else if ((FALSE == l_ModuleListIter->critical)
- && (l_ModuleListIter->relaunch_count
- >= l_ModuleListIter->retry_cnt)) {
- FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__,
- " Warning: Skipping re-launch of non-critical %s module, "
- "re-launch counter exceeded limit(%d). Terminating module.",
- l_ModuleListIter->name.c_str(),
- l_ModuleListIter->retry_cnt);
-
- l_ModuleListIter->SetModuleState(MODULE_STATE_SKIPPED);
-
- // non critical module has crossed re-launched limit and is not going to be re-launched.
- // We must terminate the module in the event that it has become non responsive.
- l_PLCmd = ePLThrdCmd_TERMINATE_MODULE_REQST;
- l_PLCmdStr = "ePLThrdCmd_TERMINATE_MODULE_REQST";
- }
- // LCOV_EXCL_STOP
- } else { // LCOV_EXCL_BR_LINE 6: Because the condition cannot be set
- // LCOV_EXCL_START 6: Because the condition cannot be set
- AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
- FRAMEWORKUNIFIEDLOG(ZONE_WARN, __FUNCTION__,
- " Warning: %s is not required to be re-launched, "
- "skipping re-launch and terminating module.",
- l_ModuleListIter->name.c_str());
-
- l_ModuleListIter->SetModuleState(MODULE_STATE_SKIPPED);
-
- // Module restart not required.
- // We must terminate the module in the event that it has become non responsive.
- l_PLCmd = ePLThrdCmd_TERMINATE_MODULE_REQST;
- l_PLCmdStr = "ePLThrdCmd_TERMINATE_MODULE_REQST";
- // LCOV_EXCL_STOP
- }
-
-
- if (ePLThrdCmd_NONE != l_PLCmd) {
- l_eStatus = SendRequestToLauncher(f_hApp, l_ModuleListIter, l_PLCmd, l_PLCmdStr); // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
-
- LOG_ERROR_REC_HIST_IF_ERRORED(l_eStatus, "SendRequestToLauncher()"); // LCOV_EXCL_BR_LINE 15: marco defined in ss_system_manager.h // NOLINT(whitespace/line_length)
- }
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_eStatus);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// \ingroup ErrorEventCreateHmiDisplayString
-///
-/// \brief Create error event HMI colored square display string.
-///
-/// \return Error Display String.
-///////////////////////////////////////////////////////////////////////////////
-std::string CSystemManager::ErrorEventCreateHmiDisplayString(void) {
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
- std::stringstream l_displayNamess; // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
- std::stringstream l_pidss; // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
- std::stringstream l_hmiDispStr; // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
-
- if (0 != strncmp("",
- m_errorEventCurrentIter->m_loggingInfo.binaryFileName,
- sizeof(m_errorEventCurrentIter->m_loggingInfo.binaryFileName))) {
- l_displayNamess << m_errorEventCurrentIter->m_loggingInfo.binaryFileName; // LCOV_EXCL_BR_LINE 11:unexpected branch // NOLINT(whitespace/line_length)
- } else {
- l_displayNamess << m_errorEventCurrentIter->m_moduleQueueName;
- }
-
- if (m_errorEventCurrentIter->m_loggingInfo.pid != 0) {
- l_pidss << " PID: " << m_errorEventCurrentIter->m_loggingInfo.pid;
- }
-
-
- FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
- return (l_hmiDispStr.str());
-} // LCOV_EXCL_BR_LINE 10:The final line
-