--- ./source/private_module/adapter/dlm_xve.c	2018-12-02 02:40:58.000000000 +0800
+++ ./source/private_module/adapter/dlm_xve.c.hotpatch	2018-12-02 02:40:58.000000000 +0800
@@ -1092,7 +1092,7 @@
 uint32_t g_dlmDataMsgSglCallBackPoodId;
 atomic_t g_dlmDataMsgTransNo;           /* ݷ͵Ψһ */
 TIMERHANDLE g_dlmDataMsgCheckTimeId;    /* ݷǷʱtimer */
-
+extern spinlock_t g_dlmMsgHandlerLock; extern spinlock_t g_dlmDataMsgHandlerLock;
 /**
 \brief  defaultZone עϢ
 \param[in] mh:Ϣص
@@ -1116,10 +1116,10 @@
     handle->msgHandle = mh;
     handle->zone = zone;
 
+    spin_lock(&g_dlmMsgHandlerLock);
     list_add_tail(&handle->list, &g_dlmMsgHandlerHead);
-
+    spin_unlock(&g_dlmMsgHandlerLock);
     DLM_LOG(DBG_LOG_DEBUG, 0, "Pid(%d) register msg handler success.", pid);
-
     return RETURN_OK;
 }
 
@@ -1135,16 +1135,16 @@
 {
     struct list_head *pos = NULL;
     DLM_MSG_HANDLE_S *handle = NULL;
-
+    spin_lock(&g_dlmMsgHandlerLock);
     list_for_each(pos, &g_dlmMsgHandlerHead)
     {
         handle = list_entry(pos, DLM_MSG_HANDLE_S, list);
         if (pid == handle->pid)
-        {
+        {spin_unlock(&g_dlmMsgHandlerLock);
             return handle;
         }
     }
-
+    spin_unlock(&g_dlmMsgHandlerLock);
     return NULL;
 }
 
@@ -1184,14 +1184,14 @@
 void dzUnregMsgHandler(void* zone, int pid)
 {
     DLM_MSG_HANDLE_S *handle = NULL;
-
+    spin_lock(&g_dlmMsgHandlerLock);
     handle = dzGetMsgHandlerByZone(zone, pid);
     if (NULL == handle)
-    {
+    {spin_unlock(&g_dlmMsgHandlerLock);
         return;
     }
     list_del(&handle->list);
-    
+    spin_unlock(&g_dlmMsgHandlerLock);
     dlmFreeToPool(handle, MY_PID, g_dlmMsgHandlerPoolId);
 
     DLM_LOG(DBG_LOG_INFO, 0, "Pid(%d) Unregister msg handler success.", pid);
@@ -1468,9 +1468,9 @@
     handle->pid = (uint16_t)pid;
     handle->zone = zone;
     memcpy(&handle->msgHandle, mh, sizeof(DLM_DATA_MSG_OPS));
-
+    spin_lock(&g_dlmDataMsgHandlerLock);
     list_add_tail(&handle->list, &g_dlmDataMsgHandlerHead);
-
+    spin_unlock(&g_dlmDataMsgHandlerLock);
     DLM_LOG(DBG_LOG_DEBUG, 0, "Pid(%d) register datamsg handler success.", pid);
 
     return RETURN_OK;
@@ -1486,16 +1486,16 @@
 {
     struct list_head *pos = NULL;
     DLM_DATA_MSG_HANDLE_S *handle = NULL;
-
+    spin_lock(&g_dlmDataMsgHandlerLock);
     list_for_each(pos, &g_dlmDataMsgHandlerHead)
     {
         handle = list_entry(pos, DLM_DATA_MSG_HANDLE_S, list);
         if (pid == handle->pid)
-        {
+        {spin_unlock(&g_dlmDataMsgHandlerLock);
             return handle;
         }
     }
-
+    spin_unlock(&g_dlmDataMsgHandlerLock);
     return NULL;
 }
 
@@ -1532,13 +1532,13 @@
 void dzUnRegDataMsgHandler(void* zone, int pid)
 {
     DLM_DATA_MSG_HANDLE_S *handle = NULL;
-
+    spin_lock(&g_dlmDataMsgHandlerLock);
     handle = dzGetDataMsgHandlerByZone(zone, pid);
     if(NULL != handle)
     {
-        list_del(&handle->list);
+        list_del(&handle->list);spin_unlock(&g_dlmDataMsgHandlerLock);
         dlmFreeToPool(handle, MY_PID, g_dlmDataMsgHandlerPoolId);
-    }
+    }else {spin_unlock(&g_dlmDataMsgHandlerLock);}
     
     DLM_LOG(DBG_LOG_DEBUG, 0, "Pid(%d) Unregister datamsg handler success.", pid);
 
@@ -2860,5 +2860,8 @@
 module_init(dlmAptInit);
 module_exit(dlmAptExit);
 
+DEFINE_SPINLOCK(g_dlmMsgHandlerLock);
+DEFINE_SPINLOCK(g_dlmDataMsgHandlerLock);
+
 #endif /* PCLINT */
 
