private void CalculateRoutingTable(object sender, EventArgs<ScheduledTaskRunningReason> e)
{
lock (m_syncRoot)
{
//Some other thread won on the race condition.
if (RoutingTablesValid)
return;
var subscribers = new List<LogSubscriberInternal>(m_subscribers.Count);
m_subscribers.RemoveWhere(x =>
{
LogSubscriberInternal subscriber = (LogSubscriberInternal)x.Target;
if (subscriber != null)
{
subscribers.Add(subscriber);
return false;
}
return true;
});
foreach (var pub in m_allPublishers)
{
CalculateRoutingTableForPublisherSync(subscribers, pub);
}
RoutingTablesValid = true;
}
}