protected bool Clustered_Lock(object key, LockExpiration lockExpiration, ref object lockId, ref DateTime lockDate, OperationContext operationContext) { try { if (ServerMonitor.MonitorActivity) { ServerMonitor.LogClientActivity("RepCacheBase.Lock", "enter"); } Function func = new Function((int)OpCodes.LockKey, new object[] { key, lockId, lockDate, lockExpiration, operationContext }, false); RspList results = Cluster.BroadcastToMultiple(Cluster.Servers, func, GroupRequest.GET_ALL); try { ClusterHelper.ValidateResponses(results, typeof(LockOptions), Name); } catch (LockingException le) { //release the lock preemptively... Clustered_UnLock(key, null, true, operationContext); return(false); } return(ClusterHelper.FindAtomicLockStatusReplicated(results, ref lockId, ref lockDate)); } catch (CacheException e) { throw; } catch (Exception e) { throw new GeneralFailureException(e.Message, e); } finally { if (ServerMonitor.MonitorActivity) { ServerMonitor.LogClientActivity("RepCacheBase.Lock", "exit"); } } }