1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-20 08:58:00 +02:00

Thread protection for project cache

This commit is contained in:
Brian Fiete 2020-09-30 07:39:53 -07:00
parent c58e30e005
commit 41858b3dc5

View file

@ -757,31 +757,17 @@ namespace IDE
public void ClearProjectNameCache() public void ClearProjectNameCache()
{ {
for (var key in mProjectNameMap.Keys) using (mMonitor.Enter())
delete key; {
mProjectNameMap.Clear(); for (var key in mProjectNameMap.Keys)
delete key;
mProjectNameMap.Clear();
}
} }
public void AddProjectToCache(Project project) public void AddProjectToCache(Project project)
{ {
void Add(String name, Project project) using (mMonitor.Enter())
{
bool added = mProjectNameMap.TryAdd(name, var keyPtr, var valuePtr);
if (!added)
return;
*keyPtr = new String(name);
*valuePtr = project;
}
Add(project.mProjectName, project);
for (var alias in project.mGeneralOptions.mAliases)
Add(alias, project);
}
public Project FindProject(StringView projectName)
{
if (mProjectNameMap.IsEmpty)
{ {
void Add(String name, Project project) void Add(String name, Project project)
{ {
@ -791,20 +777,43 @@ namespace IDE
*keyPtr = new String(name); *keyPtr = new String(name);
*valuePtr = project; *valuePtr = project;
} }
for (var project in mProjects) Add(project.mProjectName, project);
Add(project.mProjectName, project);
for (var alias in project.mGeneralOptions.mAliases)
for (var project in mProjects) Add(alias, project);
{
for (var alias in project.mGeneralOptions.mAliases)
Add(alias, project);
}
} }
}
if (mProjectNameMap.TryGetAlt(projectName, var matchKey, var value)) public Project FindProject(StringView projectName)
{
using (mMonitor.Enter())
{ {
return value; if (mProjectNameMap.IsEmpty)
{
void Add(String name, Project project)
{
bool added = mProjectNameMap.TryAdd(name, var keyPtr, var valuePtr);
if (!added)
return;
*keyPtr = new String(name);
*valuePtr = project;
}
for (var project in mProjects)
Add(project.mProjectName, project);
for (var project in mProjects)
{
for (var alias in project.mGeneralOptions.mAliases)
Add(alias, project);
}
}
if (mProjectNameMap.TryGetAlt(projectName, var matchKey, var value))
{
return value;
}
} }
return null; return null;
} }