internal short RegisterSelectiveCallback(CacheItemRemovedCallback removedCallback, CallbackType callbackType) { if (removedCallback == null) { return(-1); } lock (SyncLockSelective) { SelectiveRemoveCallbackWrapper callbackWrapper = null; // callback is not already registered with the same method, so add if (_oldSelectiveCallbackPool.GetResource(removedCallback) == null) { callbackWrapper = new SelectiveRemoveCallbackWrapper(removedCallback); _oldSelectiveCallbackPool.AddResource(removedCallback, callbackWrapper); _oldSelectiveMappingCallbackPool.AddResource(callbackWrapper, removedCallback); } // already present against the same method, so no need to add again. else { callbackWrapper = (SelectiveRemoveCallbackWrapper)_oldSelectiveCallbackPool.GetResource(removedCallback); _oldSelectiveCallbackPool.AddResource(removedCallback, callbackWrapper);//just to increment the refCount } short[] callbackIds = RegisterSelectiveEvent(callbackWrapper.MappingCallback, EventTypeInternal.ItemRemoved, EventDataFilter.None, callbackType); return(callbackIds[1]); } }
internal short UnRegisterSelectiveCallback(CacheItemRemovedCallback removedCallback) { if (removedCallback == null) { return(-1); } SelectiveRemoveCallbackWrapper callbackWrapper = null; // callback is not already registered with the same method, so add lock (SyncLockSelective) { //a callback more then one time or against wrong items. callbackWrapper = (SelectiveRemoveCallbackWrapper)_oldSelectiveCallbackPool.GetResource(removedCallback); if (callbackWrapper != null) { short[] callbackIds = UnregisterSelectiveNotification(callbackWrapper.MappingCallback, EventTypeInternal.ItemRemoved); return(callbackIds[1]); } return(-1); } }