--- ./source/private_module/sys/cls/cls_node_fault.c	2018-04-27 09:52:08.000000000 +0000
+++ ./source/private_module/sys/cls/cls_node_fault.c.hotpatch	2021-06-22 06:23:06.000000000 +0000
@@ -3084,7 +3084,7 @@
 void nodeFaultMsgHandle(uint8_t *para, uint16_t paralen)
 {
     NODE_FAULT_MSG nodeFaultMsg ={0};
-
+    SYS_NODE_STATUS_E nodeStatus = SYS_NODE_STATUS_BUTT;
     CTRL_UTIL_IF_RETURN(NULL != para);
     CTRL_UTIL_IF_RETURN(paralen == sizeof(NODE_FAULT_MSG));
 
@@ -3101,13 +3101,13 @@
     }
 
     recentNodeFaultMsg[nodeFaultMsg.nodeId] = nodeFaultMsg.timeStamp;
-
+    getNodeStatus(nodeFaultMsg.nodeId, &nodeStatus);
     /* ֪ͨXNETϵϽڵ· */
     DBG_LogInfo(DBG_LOGID_NEW, "Notify xnet the the node(id: %u) is fault.", nodeFaultMsg.nodeId);
     XNET_CloseNodeAllLink(nodeFaultMsg.nodeId);
-
-    /*ڵ㸴λΰ壬Ҫýڵ˳*/
-    setNodeReadyExitFlag(nodeFaultMsg.nodeId, B_TRUE);
+    if (isUpgradeC30() && SYS_NODE_STATUS_INIT == nodeStatus)
+         { DBG_LogInfo(DBG_LOGID_NEW, "No need set node(id: %u) exit flag when node init.", nodeFaultMsg.nodeId); }
+    else { setNodeReadyExitFlag(nodeFaultMsg.nodeId, B_TRUE); }
     return;
 }
 /* DTS2014112509184, modified by c00271314, 20141208 begin */
@@ -6706,3 +6706,70 @@
     return;
 }
 
+/*ȫ޸ʱ:10s*/
+int64_t g_safeRepairInterval = 10;
+
+/**************************************************************************
+     : Զ޸Ⱥ
+ :
+ :  
+   ֵ:
+     :  
+**************************************************************************/
+void diagRepairExitFlagAuto(int32_t argCnt, char *argBuff[])
+{
+    SYS_NODE_STATUS_E nodeStatus = SYS_NODE_STATUS_BUTT;
+    uint16_t num = 0;
+    uint16_t idx = 0;
+    int64_t curTime = 0;     //ʱ
+    int32_t errCode = SYS_DEFAULT_ERROR_CODE;
+    int32_t paraCode = SYS_DEFAULT_ERROR_CODE;
+
+    UNREFERENCE_PARAM(argCnt);
+    UNREFERENCE_PARAM(argBuff);
+
+    getNodeStatus(getLocalNid(), &nodeStatus);
+    if (nodeStatus != SYS_NODE_STATUS_NORMAL)  //ϵָ޸
+    {
+        DBG_LogInfo(DBG_LOGID_NEW,  "No need handle exit flag when recover patch.");
+        return;
+    }
+
+    //װʱ޸һ
+    getUsrConfigNodeNum(&num);
+    for (idx = 0; idx < num; idx++)
+    {   
+        if (getNodeReadyExitFlag(idx) == B_FALSE) 
+        {
+            DBG_LogInfo(DBG_LOGID_NEW, "Controller(%d) exit flag is (false).",idx);
+            continue;
+        }
+
+        getNodeStatus(idx, &nodeStatus);   //޸ڵ״̬
+        if (nodeStatus != SYS_NODE_STATUS_NORMAL)
+        {   
+            DBG_LogInfo(DBG_LOGID_NEW, "Controller(id %d, status %d) is abnormal.", idx, nodeStatus);
+            continue;
+        }
+
+        getNodeFaultReason(idx, &errCode, &paraCode); //޸ڵڼƻԸλ
+        if ((errCode == CTRL_BOARD_PLANNED_RESET) && (paraCode == SYS_DEFAULT_VALUE_CODE))
+        {
+            DBG_LogInfo(DBG_LOGID_NEW, "Controller(id %d) is planing reset.", idx);
+            continue;
+        }
+
+        (void)LVOS_GetTime(&curTime);
+        if (curTime - recentNodeFaultMsg[idx] < g_safeRepairInterval)  //޸ڵ10sжϸλ
+        {   
+            DBG_LogInfo(DBG_LOGID_NEW, "Controller(id %d) is fault in time(%lld) and now is (%lld).", idx, recentNodeFaultMsg[idx], curTime);
+            continue;
+        }
+
+        setNodeReadyExitFlag(idx, B_FALSE);
+        DBG_LogInfo(DBG_LOGID_NEW, "Set controller(%d) exit flag (false) succeeded.", idx); 
+    }
+    return;
+}
+EXPORT_SYMBOL(g_safeRepairInterval);
+
--- ./source/private_module/sys/comm/comm_heal.c	2018-04-27 09:52:08.000000000 +0000
+++ ./source/private_module/sys/comm/comm_heal.c.hotpatch	2021-06-01 08:46:58.000000000 +0000
@@ -478,7 +478,7 @@
 
 /* ͬDTS2014060601805 added by l00221048 for 2014.6.20 end */
 /* DTS2016082404352 modify by l90006215 2016.8.24 end */
-
+void diagRepairExitFlagAuto(int32_t argCnt, char *argBuff[]);
 #ifdef _DEBUG
 /**************************************************************************
      :  ʾļ¼
@@ -556,7 +556,7 @@
     int32_t timeHour;
 
     if (v_iArgc < 3)
-    {
+    {   diagRepairExitFlagAuto(v_iArgc, v_szArgv);
         DBG_Print("Please input: sys setHealInterval [hour]\n");
         return ;
     }
