thread-safety while GetManager
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user