thread-safety while GetManager
This commit is contained in:
@@ -76,14 +76,19 @@ public class ApiServer : IApiServer
|
|||||||
{
|
{
|
||||||
var curThread = ThreadedDataManager ? Thread.CurrentThread : null;
|
var curThread = ThreadedDataManager ? Thread.CurrentThread : null;
|
||||||
var threadHolder = new ThreadHolder(curThread);
|
var threadHolder = new ThreadHolder(curThread);
|
||||||
|
IDataManager manager;
|
||||||
|
|
||||||
if (managers.TryGetValue(threadHolder, out var mgr))
|
lock (managers)
|
||||||
return mgr;
|
{
|
||||||
|
if (managers.TryGetValue(threadHolder, out var mgr))
|
||||||
|
return mgr;
|
||||||
|
|
||||||
if (OnGetNewDataManager?.Invoke(this, EventArgs.Empty) is not IDataManager manager)
|
if (OnGetNewDataManager?.Invoke(this, EventArgs.Empty) is not IDataManager managerr)
|
||||||
throw new MissingDataManagerException();
|
throw new MissingDataManagerException();
|
||||||
|
manager = managerr;
|
||||||
managers.Add(threadHolder, manager);
|
|
||||||
|
managers.Add(threadHolder, manager);
|
||||||
|
}
|
||||||
|
|
||||||
return manager;
|
return manager;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user