thread-safety while GetManager

This commit is contained in:
2025-05-15 06:45:52 +02:00
parent 15d723ea38
commit 570e49ad76

View File

@@ -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();
if (OnGetNewDataManager?.Invoke(this, EventArgs.Empty) is not IDataManager managerr)
throw new MissingDataManagerException();
manager = managerr;
managers.Add(threadHolder, manager);
managers.Add(threadHolder, manager);
}
return manager;
}