提交 3a6892d2 编写于 作者: M Manish Vasani

Use lock for _lazyAnalyzers field

上级 98b46aa4
......@@ -21,6 +21,7 @@ private sealed class HighPriorityProcessor : IdleProcessor
{
private readonly IncrementalAnalyzerProcessor _processor;
private readonly AsyncDocumentWorkItemQueue _workItemQueue;
private readonly object _gate;
private Lazy<ImmutableArray<IIncrementalAnalyzer>> _lazyAnalyzers;
......@@ -37,6 +38,7 @@ private sealed class HighPriorityProcessor : IdleProcessor
{
_processor = processor;
_lazyAnalyzers = lazyAnalyzers;
_gate = new object();
_running = Task.CompletedTask;
_workItemQueue = new AsyncDocumentWorkItemQueue(processor._registration.ProgressReporter, processor._registration.Workspace);
......@@ -44,7 +46,16 @@ private sealed class HighPriorityProcessor : IdleProcessor
Start();
}
public ImmutableArray<IIncrementalAnalyzer> Analyzers => _lazyAnalyzers.Value;
public ImmutableArray<IIncrementalAnalyzer> Analyzers
{
get
{
lock (_gate)
{
return _lazyAnalyzers.Value;
}
}
}
public Task Running => _running;
......@@ -53,8 +64,11 @@ private sealed class HighPriorityProcessor : IdleProcessor
public void AddAnalyzer(IIncrementalAnalyzer analyzer)
{
var analyzers = this.Analyzers;
Interlocked.Exchange(ref _lazyAnalyzers, new Lazy<ImmutableArray<IIncrementalAnalyzer>>(() => analyzers.Add(analyzer)));
lock (_gate)
{
var analyzers = _lazyAnalyzers.Value;
_lazyAnalyzers = new Lazy<ImmutableArray<IIncrementalAnalyzer>>(() => analyzers.Add(analyzer));
}
}
public void Enqueue(WorkItem item)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册