public void RemoveSubscription(ISubscription subscription)
{
if (subscription == null)
{
throw new ArgumentNullException("subscription");
}
try
{
SubscriptionLock.EnterWriteLock();
MarkUsed();
Subscriptions.Remove(subscription);
if (Subscriptions.Count == 0)
{
// HasSubscriptions -> NoSubscriptions
Interlocked.CompareExchange(ref State,
TopicState.NoSubscriptions,
TopicState.HasSubscriptions);
}
}
finally
{
SubscriptionLock.ExitWriteLock();
}
}
}