Skip to content

Commit 02f70ce

Browse files
committed
protecting TestLogger from collection modifications
1 parent 8182d58 commit 02f70ce

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

test/WebJobs.Script.Tests.Shared/TestLogger.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ public class TestLogger : ILogger
1313
private readonly Func<string, LogLevel, bool> _filter;
1414
private IList<LogMessage> _logMessages = new List<LogMessage>();
1515

16+
// protect against changes to _logMessages while enumerating
17+
private object _syncLock = new object();
18+
1619
public TestLogger(string category, Func<string, LogLevel, bool> filter = null)
1720
{
1821
Category = category;
@@ -31,9 +34,21 @@ public bool IsEnabled(LogLevel logLevel)
3134
return _filter?.Invoke(Category, logLevel) ?? true;
3235
}
3336

34-
public IList<LogMessage> GetLogMessages() => _logMessages.ToList();
37+
public IList<LogMessage> GetLogMessages()
38+
{
39+
lock (_syncLock)
40+
{
41+
return _logMessages.ToList();
42+
}
43+
}
3544

36-
public void ClearLogMessages() => _logMessages.Clear();
45+
public void ClearLogMessages()
46+
{
47+
lock (_syncLock)
48+
{
49+
_logMessages.Clear();
50+
}
51+
}
3752

3853
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
3954
{
@@ -53,7 +68,10 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
5368
Timestamp = DateTime.UtcNow
5469
};
5570

56-
_logMessages.Add(logMessage);
71+
lock (_syncLock)
72+
{
73+
_logMessages.Add(logMessage);
74+
}
5775
}
5876
}
5977

0 commit comments

Comments
 (0)