From 570e49ad769114b9cd490ab5d841decdeb951fa1 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Thu, 15 May 2025 06:45:52 +0200 Subject: [PATCH] thread-safety while GetManager --- Pilz.Net/Api/ApiServer.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Pilz.Net/Api/ApiServer.cs b/Pilz.Net/Api/ApiServer.cs index 71f15a2..263188d 100644 --- a/Pilz.Net/Api/ApiServer.cs +++ b/Pilz.Net/Api/ApiServer.cs @@ -76,14 +76,19 @@ public class ApiServer : IApiServer { var curThread = ThreadedDataManager ? Thread.CurrentThread : null; var threadHolder = new ThreadHolder(curThread); + IDataManager manager; - if (managers.TryGetValue(threadHolder, out var mgr)) - return mgr; + lock (managers) + { + if (managers.TryGetValue(threadHolder, out var mgr)) + return mgr; - if (OnGetNewDataManager?.Invoke(this, EventArgs.Empty) is not IDataManager manager) - throw new MissingDataManagerException(); - - managers.Add(threadHolder, manager); + if (OnGetNewDataManager?.Invoke(this, EventArgs.Empty) is not IDataManager managerr) + throw new MissingDataManagerException(); + manager = managerr; + + managers.Add(threadHolder, manager); + } return manager; }