From 6e3a9c2a780b4f762fb8b85c9ee9326ab67e3815 Mon Sep 17 00:00:00 2001 From: glax Date: Sat, 2 Sep 2023 21:53:09 +0200 Subject: [PATCH] Added Lock to MemoryLogger --- Logging/MemoryLogger.cs | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/Logging/MemoryLogger.cs b/Logging/MemoryLogger.cs index bf42fef..2921cbf 100644 --- a/Logging/MemoryLogger.cs +++ b/Logging/MemoryLogger.cs @@ -6,6 +6,7 @@ public class MemoryLogger : LoggerBase { private readonly SortedList _logMessages = new(); private int _lastLogMessageIndex = 0; + private bool _lockLogMessages = false; public MemoryLogger(Encoding? encoding = null) : base(encoding) { @@ -14,8 +15,13 @@ public class MemoryLogger : LoggerBase protected override void Write(LogMessage value) { - while(!_logMessages.TryAdd(DateTime.Now, value)) - Thread.Sleep(10); + if (!_lockLogMessages) + { + _lockLogMessages = true; + while(!_logMessages.TryAdd(DateTime.Now, value)) + Thread.Sleep(10); + _lockLogMessages = false; + } } public string[] GetLogMessage() @@ -35,7 +41,12 @@ public class MemoryLogger : LoggerBase for (int retIndex = 0; retIndex < ret.Length; retIndex++) { - ret[retIndex] = _logMessages.GetValueAtIndex(_logMessages.Count - retLength + retIndex).ToString(); + if (!_lockLogMessages) + { + _lockLogMessages = true; + ret[retIndex] = _logMessages.GetValueAtIndex(_logMessages.Count - retLength + retIndex).ToString(); + _lockLogMessages = false; + } } _lastLogMessageIndex = _logMessages.Count - 1; @@ -52,7 +63,12 @@ public class MemoryLogger : LoggerBase { try { - ret.Add(_logMessages.GetValueAtIndex(_lastLogMessageIndex + retIndex).ToString()); + if (!_lockLogMessages) + { + _lockLogMessages = true; + ret.Add(_logMessages.GetValueAtIndex(_lastLogMessageIndex + retIndex).ToString()); + _lockLogMessages = false; + } } catch (NullReferenceException e)//Called when LogMessage has not finished writing {