Skip to content

Commit 2dd7bae

Browse files
authored
Only notify about main BlockchainProcessor shutdown (#8819)
1 parent c0864a5 commit 2dd7bae

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

src/Nethermind/Nethermind.Consensus/Processing/BlockchainProcessor.cs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public sealed class BlockchainProcessor : IBlockchainProcessor, IBlockProcessing
6161

6262
private bool _recoveryComplete = false;
6363
private int _queueCount;
64+
private bool _disposed;
6465

6566
private readonly ProcessingStats _stats;
6667

@@ -101,9 +102,6 @@ public BlockchainProcessor(
101102
_stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
102103
_options = options;
103104

104-
_blockTree.NewBestSuggestedBlock += OnNewBestBlock;
105-
_blockTree.NewHeadBlock += OnNewHeadBlock;
106-
107105
_stats = new ProcessingStats(stateReader, _logger);
108106
_loopCancellationSource = new CancellationTokenSource();
109107
}
@@ -179,13 +177,34 @@ public async ValueTask Enqueue(Block block, ProcessingOptions processingOptions)
179177

180178
public void Start()
181179
{
180+
ObjectDisposedException.ThrowIf(_disposed, this);
181+
if (_processorTask is not null) ThrowAlreadyStarted();
182+
183+
_blockTree.NewBestSuggestedBlock += OnNewBestBlock;
184+
_blockTree.NewHeadBlock += OnNewHeadBlock;
185+
182186
_loopCancellationSource ??= new CancellationTokenSource();
183187
_recoveryTask = RunRecovery();
184188
_processorTask = RunProcessing();
189+
190+
if (_logger.IsInfo) _logger.Info($"{nameof(BlockchainProcessor)} started.");
191+
192+
[StackTraceHidden, DoesNotReturn]
193+
static void ThrowAlreadyStarted() => throw new InvalidOperationException($"{nameof(BlockchainProcessor)} already started");
185194
}
186195

187196
public async Task StopAsync(bool processRemainingBlocks = false)
188197
{
198+
if (_disposed) return;
199+
_disposed = true;
200+
201+
bool isStarted = _processorTask is not null;
202+
if (isStarted)
203+
{
204+
_blockTree.NewBestSuggestedBlock -= OnNewBestBlock;
205+
_blockTree.NewHeadBlock -= OnNewHeadBlock;
206+
}
207+
189208
_recoveryComplete = true;
190209
if (processRemainingBlocks)
191210
{
@@ -201,7 +220,7 @@ public async Task StopAsync(bool processRemainingBlocks = false)
201220
}
202221

203222
await Task.WhenAll(_recoveryTask ?? Task.CompletedTask, _processorTask ?? Task.CompletedTask);
204-
if (_logger.IsInfo) _logger.Info("Blockchain Processor shutdown complete.. please wait for all components to close");
223+
if (isStarted && _logger.IsInfo) _logger.Info($"{nameof(BlockchainProcessor)} shutdown complete.");
205224
}
206225

207226
private async Task RunRecovery()
@@ -800,8 +819,6 @@ void ThrowUnknownUncleHash(Block suggestedBlock, int i)
800819

801820
public async ValueTask DisposeAsync()
802821
{
803-
_blockTree.NewBestSuggestedBlock -= OnNewBestBlock;
804-
_blockTree.NewHeadBlock -= OnNewHeadBlock;
805822
await StopAsync(processRemainingBlocks: false);
806823
}
807824

0 commit comments

Comments
 (0)