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:
parent
c58e30e005
commit
41858b3dc5
1 changed files with 41 additions and 32 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue