public void Unreserve(IResourceRequest request) { IResource originator = m_wrappedByWhom ?? this; RequestEvent?.Invoke(request, originator); lock (this) { AttemptReturnToService(request); request.ResourceObtainedFrom = null; } UnreservedEvent?.Invoke(request, originator); }
/// <summary> /// Unreserves the specified request. Returns it to availability. /// </summary> /// <param name="request">The request.</param> public void Unreserve(IResourceRequest request) { lock (this) { DoRollback(request); UnreservedEvent?.Invoke(request, this); ResourceUnreserved?.Invoke(request, this); } while (m_waiters.Count > 0) { IDetachableEventController dec = (IDetachableEventController)m_waiters[0]; m_waiters.RemoveAt(0); dec.Resume(); } }