--- ./source/private_module/ramcache/algorithm/cp/cp_obj.c	2018-02-09 13:47:03.000000000 +0000
+++ ./source/private_module/ramcache/algorithm/cp/cp_obj.c.hotpatch	2020-04-21 03:53:07.000000000 +0000
@@ -530,7 +530,7 @@
     decReadChunkRef(chunk, RC_TRACE_REF_CP_DEC);
     return;
 }
-
+extern void removeCKFromCpNoLockForHotpatch(READ_CHUNK_S *chunk, CP_OBJ_S *cpObj);
 /*************************************************************************
      : CPƳchunk
  : cpObj: CP
@@ -541,16 +541,16 @@
 **************************************************************************/
 static int32_t _removeChunkByCacheBase(void *chunk, void *cpObj)
 {
-    CP_OBJ_S *obj = (CP_OBJ_S *)cpObj;
-
+    CP_OBJ_S *obj = (CP_OBJ_S *)cpObj;bool isNeedDecRef = B_FALSE;
     LOCK_CP_OBJ(obj);
-    if (isChunkInCpNoLock(chunk))
-    {
-        removeCKFromCpNoLock((READ_CHUNK_S *)chunk, obj);
-        resetChunkDataState(chunk);
+    if (isChunkInCpNoLock(chunk)){
+        removeCKFromCpNoLockForHotpatch((READ_CHUNK_S *)chunk, obj);
+        resetChunkDataState(chunk);isNeedDecRef = B_TRUE;
     }
     UNLOCK_CP_OBJ(obj);
-
+    if (isNeedDecRef){
+        decAndCheckReadChunkRef((READ_CHUNK_S *)chunk, RC_TRACE_REF_CP_DEC);
+    }
     return RETURN_OK;
 }
 
@@ -816,7 +816,7 @@
     UNLOCK_CP_OBJ(cpObj);
 
     /* chunkü⴦ʧܣCPǰüΪ0chunk̭ */
-    decReadChunkRef(chunk, RC_TRACE_REF_CP_HANDLE_DEC);
+    decAndCheckReadChunkRef(chunk, RC_TRACE_REF_CP_HANDLE_DEC);
 
     return;
 }
@@ -1053,10 +1053,10 @@
         /* жǷsmartcacheδֱӶchunkҪdropݸsmartcache */
         if (!isBaseCanOperateSmartCache(cacheBase))
         {
-            removeCKFromCpNoLock(readChunk, cpObject);
+            removeCKFromCpNoLockForHotpatch(readChunk, cpObject);
             resetChunkDataState(readChunk);
-
             UNLOCK_CP_OBJ(cpObject);
+            decAndCheckReadChunkRef(readChunk, RC_TRACE_REF_CP_DEC);
             continue;
         }
 
@@ -1066,12 +1066,12 @@
         atomic_inc(&cacheBase->smartCacheIoNum);
         if (!isBaseCanOperateSmartCache(cacheBase))
         {
-            removeCKFromCpNoLock(readChunk, cpObject);
+            removeCKFromCpNoLockForHotpatch(readChunk, cpObject);
             resetChunkDataState(readChunk);
-
             atomic_dec(&cacheBase->smartCacheIoNum);
 
             UNLOCK_CP_OBJ(cpObject);
+            decAndCheckReadChunkRef(readChunk, RC_TRACE_REF_CP_DEC);
             continue;
         }
 
@@ -1264,10 +1264,10 @@
         /* smartcacheֱͣժ״̬ */
         if (!isBaseCanOperateSmartCache(cacheBase))
         {
-            removeCKFromCpNoLock(readChunk, cpObj);
+            removeCKFromCpNoLockForHotpatch(readChunk, cpObj);
             resetChunkDataState(readChunk);
-
             UNLOCK_CP_OBJ(cpObj);
+            decAndCheckReadChunkRef(readChunk, RC_TRACE_REF_CP_DEC);
             continue;
         }
 
@@ -1277,12 +1277,12 @@
         atomic_inc(&cacheBase->smartCacheIoNum);
         if (!isBaseCanOperateSmartCache(cacheBase))
         {
-            removeCKFromCpNoLock(readChunk, cpObj);
+            removeCKFromCpNoLockForHotpatch(readChunk, cpObj);
             resetChunkDataState(readChunk);
 
             atomic_dec(&cacheBase->smartCacheIoNum);
-
             UNLOCK_CP_OBJ(cpObj);
+            decAndCheckReadChunkRef(readChunk, RC_TRACE_REF_CP_DEC);
             continue;
         }
 
@@ -1290,12 +1290,12 @@
         dataState = GET_CK_DATA_STATE(readChunk);
         if (CP_CHUNK_DATA_STATE_CLEAN == dataState)
         {
-            removeCKFromCpNoLock(readChunk, cpObj);
+            removeCKFromCpNoLockForHotpatch(readChunk, cpObj);
             resetChunkDataState(readChunk);
 
             atomic_dec(&cacheBase->smartCacheIoNum);
-
             UNLOCK_CP_OBJ(cpObj);
+            decAndCheckReadChunkRef(readChunk, RC_TRACE_REF_CP_DEC);
             continue;
         }
 
@@ -2138,4 +2138,16 @@
 
     return;
 }
-    
+
+void removeCKFromCpNoLockForHotpatch(READ_CHUNK_S *chunk, CP_OBJ_S *cpObj)
+{
+    CP_FIFO_LIST_S *cpList = NULL;
+    CP_PRI_S * cpPri= NULL;
+
+    cpList = &cpObj->cpList;
+    cpPri = GET_CK_CP_PRIV(chunk);
+
+    containerDel(cpList, &cpPri->cpNode);
+    return;
+}
+
