--- ./source/private_module/directory/cht.c	2018-09-27 13:44:07.000000000 +0000
+++ ./source/private_module/directory/cht.c.hotpatch	2018-09-27 15:37:12.000000000 +0000
@@ -822,48 +822,52 @@
     DLM_DIR_BROADCAST_MSG_S* broadcastMsg = NULL;
     int32_t ret = RETURN_ERROR;
     uint16_t localNid = 0;
-
+    DLM_DIR_NID_S srcNid;
+    DLM_DIR_NID_S dstNid;
     UNREFERENCE_PARAM(len);
     cht = (DLM_DIR_CHT_S*)diralg;
     broadcastMsg = (DLM_DIR_BROADCAST_MSG_S*)msg;
-    /* begin-end l00296137@20150502 (A)SSERTģ˴ȾΪsizeof DLM_DIR_BROADCAST_MSG_S*/
-
     localNid = cht->zone->nid;
-    DLM_LOG(DBG_LOG_INFO, DLM_LOG_ID_DIR(1), "Zone(0x%x): Process broadcast msg, curent node %u, srcNid(%u,%u), dstNid(%u,%u), event %u.", 
-                          ZONE_NAME(cht->zone), localNid, broadcastMsg->srcNid.nid, broadcastMsg->srcNid.vnid, 
+    DLM_LOG(DBG_LOG_INFO, DLM_LOG_ID_DIR(1), "Zone(0x%x): Process broadcast msg, curent node %u, srcNid(%u,%u), dstNid(%u,%u), event %u.", ZONE_NAME(cht->zone), localNid, broadcastMsg->srcNid.nid, broadcastMsg->srcNid.vnid, 
                           broadcastMsg->dstNid.nid, broadcastMsg->dstNid.vnid, broadcastMsg->eventType);
     /* ¼ںĽڵ¼д */
     if (DLM_DIR_TASK_EVENT_TYPE_OFFLINE != broadcastMsg->eventType)
     {
         dlmChtRecordRecvEvent(cht, &broadcastMsg->srcNid, &broadcastMsg->dstNid, broadcastMsg->eventType);
     }
-
+    srcNid.nid = broadcastMsg->srcNid.nid;
+    srcNid.vnid = broadcastMsg->srcNid.vnid;
+    dstNid.nid = broadcastMsg->dstNid.nid;
+    dstNid.vnid = broadcastMsg->dstNid.vnid;
     spin_lock(&cht->lock); 
+    if(broadcastMsg->eventType == DLM_DIR_TASK_EVENT_TYPE_ONLINE_MIG_DONE
+        && !dlmTmTaskisExist(&cht->tm, srcNid, dstNid))
+    {
+        spin_unlock(&cht->lock);
+        DLM_LOG(DBG_LOG_INFO, 0, "Zone(0x%x): broadcastMsg is invalid.",
+            ZONE_NAME(cht->zone));
+        return;
+    }
     switch(broadcastMsg->eventType)
     {
         case DLM_DIR_TASK_EVENT_TYPE_ONLINE_MIG_DONE:
             ret = dlmChtVnodeEventHandle(cht, broadcastMsg->dstNid.nid, broadcastMsg->dstNid.vnid, DLM_NODE_STATE_NORMAL);
-            break;
-                        
+            break;                 
         case DLM_DIR_TASK_EVENT_TYPE_OFFLINE_MIG_DONE:
             ret = dlmChtVnodeEventHandle(cht, broadcastMsg->srcNid.nid, broadcastMsg->srcNid.vnid, DLM_NODE_STATE_INI);
-            break;
-            
+            break;       
         case DLM_DIR_TASK_EVENT_TYPE_ONLINE_MIG_FAIL:
             ret = dlmChtOnlineMigFailHandle(cht, broadcastMsg->dstNid.nid, broadcastMsg->dstNid.vnid);
             break;
-            
+           
         case DLM_DIR_TASK_EVENT_TYPE_OFFLINE_MIG_FAIL:
             ret = dlmChtOfflineMigFailHandle(cht, broadcastMsg->srcNid.nid, broadcastMsg->srcNid.vnid);
             break;
             
         case DLM_DIR_TASK_EVENT_TYPE_OFFLINE:
-            /*Խڵĸڵ㴦*/
             ret = dlmChtNodeEventHandle(cht, broadcastMsg->srcNid.nid, DLM_NODE_EVENT_NODE_LEAVE);
             break;
-            
         case DLM_DIR_TASK_EVENT_TYPE_RECOVERY_DONE:
-            /*Թϵڵ㴦*/
             DLM_LOG(DBG_LOG_DEBUG, DLM_LOG_ID_DIR(1), "DLMRec, recv broadcast, evtCnt(%u).",broadcastMsg->eventCount); 
             if (broadcastMsg->eventCount == 0)
             {
@@ -871,9 +875,6 @@
             }
             else
             {
-            /* жǷ֧ccdbpackbroadcastMsg->eventCountжǷǿۺϵ¼,
-                ֹۺϹУȺгֲ֧־ۺϵĳ²ۺϵ¼
-            */
                 uint8_t i =0;
                 for(i=0; i<broadcastMsg->eventCount; i++)
                 {
@@ -891,7 +892,6 @@
             
     }
     spin_unlock(&cht->lock); 
-    
     if(RETURN_OK != ret)
     {
         DLM_LOG(DBG_LOG_ERROR, DLM_LOG_ID_DIR(1), "Zone(0x%x): Process message failed, type(%d).", 
