internal InstancePersistenceEvent AddHandleToEvent(InstanceHandle handle, InstancePersistenceEvent persistenceEvent, InstanceOwner owner)
 {
     lock (this.ThisLock)
     {
         InstanceNormalEvent ownerEventHelper = this.GetOwnerEventHelper(persistenceEvent, owner);
         ownerEventHelper.BoundHandles.Add(handle);
         ownerEventHelper.PendingHandles.Remove(handle);
         return(ownerEventHelper.IsSignaled ? ownerEventHelper : null);
     }
 }
Example #2
0
        // Must be called under ThisLock.  Doesn't validate the InstanceOwner.
        InstanceNormalEvent GetOwnerEventHelper(InstancePersistenceEvent persistenceEvent, InstanceOwner owner)
        {
            InstanceNormalEvent normal;

            if (!owner.Events.TryGetValue(persistenceEvent.Name, out normal))
            {
                normal = new InstanceNormalEvent(persistenceEvent);
                owner.Events.Add(persistenceEvent.Name, normal);
            }
            return(normal);
        }
        private InstanceNormalEvent GetOwnerEventHelper(InstancePersistenceEvent persistenceEvent, InstanceOwner owner)
        {
            InstanceNormalEvent event2;

            if (!owner.Events.TryGetValue(persistenceEvent.Name, out event2))
            {
                event2 = new InstanceNormalEvent(persistenceEvent);
                owner.Events.Add(persistenceEvent.Name, event2);
            }
            return(event2);
        }
Example #4
0
        internal void PendHandleToEvent(InstanceHandle handle, InstancePersistenceEvent persistenceEvent, InstanceOwner owner)
        {
            lock (ThisLock)
            {
                Fx.Assert(this.owners.ContainsKey(owner.InstanceOwnerId), "InstanceHandle called PendHandleToEvent on wrong InstanceStore!!");
                Fx.Assert(object.ReferenceEquals(this.owners[owner.InstanceOwnerId].Target, owner), "How did multiple of the same owner become simultaneously active?");

                InstanceNormalEvent normal = GetOwnerEventHelper(persistenceEvent, owner);
                Fx.Assert(!normal.PendingHandles.Contains(handle), "Should not have already pended the handle.");
                Fx.Assert(!normal.BoundHandles.Contains(handle), "Should not be able to pend an already-bound handle.");
                normal.PendingHandles.Add(handle);
            }
        }
Example #5
0
        internal InstancePersistenceEvent AddHandleToEvent(InstanceHandle handle, InstancePersistenceEvent persistenceEvent, InstanceOwner owner)
        {
            lock (ThisLock)
            {
                Fx.Assert(this.owners.ContainsKey(owner.InstanceOwnerId), "InstanceHandle called AddHandleToEvent on wrong InstanceStore!!");
                Fx.Assert(object.ReferenceEquals(this.owners[owner.InstanceOwnerId].Target, owner), "How did multiple instances of the same owner become simultaneously active?");

                InstanceNormalEvent normal = GetOwnerEventHelper(persistenceEvent, owner);
                Fx.Assert(normal.PendingHandles.Contains(handle), "Should have already pended the handle.");
                Fx.Assert(!normal.BoundHandles.Contains(handle), "Should not be able to add a handle to an event twice.");
                normal.BoundHandles.Add(handle);
                normal.PendingHandles.Remove(handle);
                return(normal.IsSignaled ? normal : null);
            }
        }
 // Must be called under ThisLock.  Doesn't validate the InstanceOwner.
 InstanceNormalEvent GetOwnerEventHelper(InstancePersistenceEvent persistenceEvent, InstanceOwner owner)
 {
     InstanceNormalEvent normal;
     if (!owner.Events.TryGetValue(persistenceEvent.Name, out normal))
     {
         normal = new InstanceNormalEvent(persistenceEvent);
         owner.Events.Add(persistenceEvent.Name, normal);
     }
     return normal;
 }
 private InstanceNormalEvent GetOwnerEventHelper(InstancePersistenceEvent persistenceEvent, InstanceOwner owner)
 {
     InstanceNormalEvent event2;
     if (!owner.Events.TryGetValue(persistenceEvent.Name, out event2))
     {
         event2 = new InstanceNormalEvent(persistenceEvent);
         owner.Events.Add(persistenceEvent.Name, event2);
     }
     return event2;
 }