--- ./source/private_module/range/rl_lib/rl_internal.c	2018-12-02 02:40:58.000000000 +0800
+++ ./source/private_module/range/rl_lib/rl_internal.c.hotpatch	2018-12-02 02:40:58.000000000 +0800
@@ -2709,8 +2709,7 @@
 
     /* ͻ(ͻԼжǷҪ) */
     reqNew->ops->eliminateConflict(reqNew, reqWait);
-
-
+    if(reqWait->type == DLMRL_REQ_TYPE_PROXY) {if(reqWait->reqStatistic.conflictCount > 32) {return;}}
     /* Դȴеreq */
     /* ´ȴеҪǱڵ */
     ret = reqWait->ops->handleWaitReq(reqWait, reqNew, flag, tmpHead);
@@ -2734,7 +2733,8 @@
         }
     }
     /* elseΪpendingʲô */
-}
+} 
+
 
 /**
 \brief ԤͳϢԤȡȫ㡢㡢
--- ./source/private_module/range/rl_lib/rl_owner.c	2018-12-02 02:40:58.000000000 +0800
+++ ./source/private_module/range/rl_lib/rl_owner.c.hotpatch	2018-12-02 02:40:58.000000000 +0800
@@ -879,3 +879,21 @@
     }
 }
 
+void rlOwnerProxyDeleteForUnlock(uint16_t nid, struct list_head* ownerList)
+{
+    struct list_head* pos = NULL;
+    struct list_head* next = NULL;
+    DLMRL_OWNER_PROXY_S* owner = NULL;
+    /* begin-end l00296137@20150502 (A)SSERTģ˴Ϊ*/
+
+    list_for_each_safe(pos, next, ownerList)
+    {
+        owner = list_entry(pos, DLMRL_OWNER_PROXY_S, stHead);
+        if(rlOwnerProxyIsEqual(nid, owner->nid))
+        {
+            list_del(pos);
+            rlOwnerProxyDestroy(owner);
+            break;
+        }
+    }
+}
--- ./source/private_module/range/rl_lib/rl_request_proxy.c	2018-12-02 02:40:58.000000000 +0800
+++ ./source/private_module/range/rl_lib/rl_request_proxy.c.hotpatch	2018-12-02 02:40:58.000000000 +0800
@@ -87,15 +87,13 @@
     (void)rlPodProxyIncGrantItvl(req->rsc, reqProxy->podProxy);
 }
 
-//req appĲͬ
+extern void rlOwnerProxyDeleteForUnlock(uint16_t nid, struct list_head* ownerList);
 void rlReqProxyIntreeDelete(DLMRL_REQ_BASE_S* req, DLM_INTREE_NODE_S* node2Delete)
 {
     /* node2DelownerListƳָownerownerƳҽڵ㲻Ϊ䣬ɾڵ */
-    rlOwnerProxyDelete(((DLMRL_REQ_PROXY_S*)req)->nid, &node2Delete->ownerList);
+    rlOwnerProxyDeleteForUnlock(((DLMRL_REQ_PROXY_S*)req)->nid, &node2Delete->ownerList);
     node2Delete->numberOfOwners--;
     req->rsc->statistics.numOfGrantedInterval--;
-
-    /* proxyȨ--(ڲִȨ--) */
     (void)rlPodProxyDecGrantItvl(((DLMRL_REQ_PROXY_S*)req)->podProxy);
 
     if (0 == node2Delete->numberOfOwners)
@@ -112,6 +110,8 @@
     }
 }
 
+
+
 /* proxy/ͷŻʱᴥáµȴеreqĳͻϢ */
 void rlReqProxyEliminateConflict(DLMRL_REQ_BASE_S* req, DLMRL_REQ_BASE_S* reqWait)
 {
--- ./source/private_module/range/rl_lib/semantics_pm.c	2018-12-02 02:40:58.000000000 +0800
+++ ./source/private_module/range/rl_lib/semantics_pm.c.hotpatch	2018-12-02 02:40:58.000000000 +0800
@@ -242,15 +242,11 @@
     return;
 }
 
+extern bool rlReqIsTestLock(DLMRL_REQ_BASE_S *req);
 /************************************************************************
     ܣڴ master ٻʱ, 黹Ȩ
           ѾԹ黹ĲִȨȡ req  release б
            release бΪ,  release бе鶼黹master
-           release бΪ, ˵Ȩѷһ, ϢʱĲһ, Ҳ
-          Ĳһ, жϵǰٻȨǷҲͻ
-          ĿǷֹϢ¹黹˲ڵȨ
-src ӦԴϢ, req ٻϢɵ
-
   ֵ黹ɹ, 򷵻 RETURN_OK; гͻܹ黹, 򷵻 DLMRL_RET_PENDING
 ************************************************************************/
 static int32_t rlReleaseItemsIfNotEmpty(DLMRL_RSC_S *rsc, DLMRL_REQ_MASTER_S *req)
@@ -288,9 +284,11 @@
             continue;
         }
         if (intervalIsOverlapped(&(reqWait->itvlOriginal), &(req->base.itvlOriginal))
-            && (reqWait->mode + req->base.mode > DLM_MODE_EXCLU))
-        {
-            return DLMRL_RET_PENDING;
+            && reqWait->mode + req->base.mode > DLM_MODE_EXCLU) { 
+            if(rlReqIsTestLock(&req->base)) { reqWait->createTime = reqWait->seq; reqWait->seq = rlGetReqSeq(rsc);
+            }else {
+            	return DLMRL_RET_PENDING; }
+
         }
     }
 
@@ -325,6 +323,8 @@
     return RETURN_OK;
 }
 
+
+
 /*
  * Ƿٻ
  * ǰٻԴ:
@@ -557,7 +557,7 @@
 {
     /* 뱾Ϊ쳣 */
     /* begin l00296137@20150502 (A)SSERTģ㱨ش*/
-    DLM_LOG(DBG_LOG_ERROR, DLM_LOGID_CRI(DLM_LOGID_RL_4027), "A bug occured, master process cache interval because lock req from proxy.");
+    DLM_LOG(DBG_LOG_DEBUG, DLM_LOGID_CRI(DLM_LOGID_RL_4027), "master process cache interval because lock req from proxy.");
     /* end l00296137@20150502 (A)SSERTģ㱨ش*/
     UNREFERENCE_PARAM(node);
     UNREFERENCE_PARAM(req);
@@ -651,7 +651,7 @@
 {
     /* 뱾Ϊ쳣 */
     /* begin l00296137@20150502 (A)SSERTģ㱨ش*/
-    DLM_LOG(DBG_LOG_ERROR, DLM_LOGID_CRI(DLM_LOGID_RL_4028), "A bug occured, master process cache interval because unlock req from proxy.");
+    DLM_LOG(DBG_LOG_DEBUG, DLM_LOGID_CRI(DLM_LOGID_RL_4028), "master process cache interval because unlock req from proxy.");
     /* end l00296137@20150502 (A)SSERTģ㱨ش*/
     UNREFERENCE_PARAM(node);
     UNREFERENCE_PARAM(req);
@@ -1647,4 +1647,8 @@
     }
 }
 
-
+bool rlReqIsTestLock(DLMRL_REQ_BASE_S *req)
+{
+    return (req->flags & DLMRL_REQ_FLAG_CONFLICTFAIL) && (req->flags & DLMRL_REQ_FLAG_MASTER_TRYREVOKE)
+            && (req->flags & DLMRL_REQ_FLAG_DONOTGRANT);
+}
