--- ./source/private_module/ctrl/flow/flow_engine/flow.c	2018-04-04 09:03:55.000000000 +0000
+++ ./source/private_module/ctrl/flow/flow_engine/flow.c.hotpatch	2019-07-05 12:00:31.000000000 +0000
@@ -720,7 +720,7 @@
     TASK_CALL_ACTION_DONE_ASYNC_WITH_RESULT((TASK_S *)arg, RETURN_OK);
     return;
 }
-
+bool isNodeFaultFlowNeedDeleteLog(FLOW_TASK_S *flow_task);
 /** \brief  кĽ
     \param[in] TASK_S *task
     \param[out] 
@@ -731,20 +731,20 @@
 static int32_t doneProcAfterFlowRun(TASK_S *task)
 {
     FLOW_TASK_S *flow_task = NULL;
-
     flow_task = (FLOW_TASK_S *)task;
-
     /*гɹʧܣҪɾLOGɾRedoLog*/
     if((B_FALSE == flow_task->runInfo.failedFlag) || (B_TRUE == flow_task->runInfo.isNeedForceFreeLog))
     {
         /*е̲ҪLOGlogIdΪINVALID_VALUE64*/
-        if(INVALID_VALUE64 != flow_task->logId)
-        {
+        if(INVALID_VALUE64 != flow_task->logId){
             freeClsLog(OSP_SYS, flow_task->logId, flowFreeClsLogCB, task);
             return RETURN_OK;
         }
     }
-
+    if(B_TRUE == flow_task->runInfo.failedFlag) { /*ʧ,Ϊ˫ת̣ҽڵ״̬ΪInit״̬ҪɾLOG*/
+        if((INVALID_VALUE64 != flow_task->logId) && (isNodeFaultFlowNeedDeleteLog(flow_task) == B_TRUE)) {  
+            freeClsLog(OSP_SYS, flow_task->logId, flowFreeClsLogCB, task);
+            return RETURN_OK;}}
     TASK_CALL_ACTION_DONE_ASYNC_WITH_RESULT(task, RETURN_OK);
     return RETURN_OK;
 }
@@ -1733,3 +1733,38 @@
 
 #endif
 
+extern bool JugeFaultNodeStatusIsInit(FLOW_ID_E  flowId, void *para);
+/*****************************************************************************
+     : isNodeFaultFlowNeedDeleteLog
+   : ж˫תҵǷҪɾ־
+   : flow_task: TASK
+   :   
+   ֵ  : B_TRUE:Ҫɾ־
+             B_FLASE:̲Ҫɾ־
+ ú  : 
+   : 
+*****************************************************************************/
+bool isNodeFaultFlowNeedDeleteLog(FLOW_TASK_S *flow_task)
+{
+    void *para = NULL;
+    bool retVal = B_FALSE;
+
+    /*̷˫תֱ̣ӷɾ־*/
+    if((flow_task->flowId != FLOW_OBJ_NODE_FAULT_PRE) 
+        && (flow_task->flowId != FLOW_OBJ_NODE_FAULT_POST))
+    {
+        return B_FALSE;
+    }
+    
+    para = getFlowInitParaAddrInner(flow_task);
+    if (NULL == para)
+    {
+        return B_FALSE;
+    }
+
+    /*жflow3flow 4Ľڵ״̬ǷΪInit*/
+    retVal = JugeFaultNodeStatusIsInit(flow_task->flowId, para);
+    
+    return retVal;
+}
+
