in src/TestFramework/Core/Logging/Logger.cs [330:388]
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
if (logRunner.IsAlive)
{
// send end log message to end the thread.
AvailableLogMessage endMessage = new AvailableLogMessage(
new List<LogSink>(), new Dictionary<string, object>(), true);
lock (logMessageQueue)
{
logMessageQueue.Enqueue(endMessage);
hRead.Set();
}
// wait for thread end
logRunner.Join();
ProcessErrors();
}
// close event handles
hRead.Close();
hWrite.Close();
// clear queue
lock (logMessageQueue)
{
logMessageQueue.Clear();
logMessageQueue = null;
}
// clear sinks
if (null != logProfile)
{
foreach (LogSink sink in logProfile.AllSinks)
{
sink.Close();
}
logProfile.ProfilesMap.Clear();
}
// clear other resources
activeKinds.Clear();
activeKinds = null;
registeredProviders.Clear();
registeredProviders = null;
outputStatistics.Clear();
outputStatistics = null;
errors.Clear();
errors = null;
}
this.disposed = true;
}
}