From 2073cdf5e54f2e88027f6bf8f1ca606329bdbf68 Mon Sep 17 00:00:00 2001 From: EvilFactory Date: Tue, 17 Jan 2023 14:17:43 -0300 Subject: [PATCH] Fixed timer crash once for all - yes it was a race condition --- .../SharedSource/LuaCs/LuaCsTimer.cs | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsTimer.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsTimer.cs index 18e6ade84..dd20741d3 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsTimer.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsTimer.cs @@ -60,38 +60,44 @@ namespace Barotrauma throw new ArgumentNullException(nameof(timedAction)); } - int insertionPoint = timedActions.BinarySearch(timedAction, new TimerComparer()); - - if (insertionPoint < 0) + lock (timedActions) { - insertionPoint = ~insertionPoint; + int insertionPoint = timedActions.BinarySearch(timedAction, new TimerComparer()); + + if (insertionPoint < 0) + { + insertionPoint = ~insertionPoint; + } + + timedActions.Insert(insertionPoint, timedAction); } - - timedActions.Insert(insertionPoint, timedAction); } public void Update() { - TimedAction[] timedCopy = timedActions.ToArray(); - for (int i = 0; i < timedCopy.Length; i++) + lock (timedActions) { - TimedAction timedAction = timedCopy[i]; - if (Time >= timedAction.ExecutionTime) + TimedAction[] timedCopy = timedActions.ToArray(); + for (int i = 0; i < timedCopy.Length; i++) { - try + TimedAction timedAction = timedCopy[i]; + if (Time >= timedAction.ExecutionTime) { - timedAction.Action(); - } - catch (Exception e) - { - LuaCsLogger.HandleException(e, LuaCsMessageOrigin.CSharpMod); - } + try + { + timedAction.Action(); + } + catch (Exception e) + { + LuaCsLogger.HandleException(e, LuaCsMessageOrigin.CSharpMod); + } - timedActions.Remove(timedAction); - } - else - { - break; + timedActions.Remove(timedAction); + } + else + { + break; + } } } }