diff --git a/src/Nethermind/Nethermind.Synchronization.Test/ForwardHeaderProviderTests.cs b/src/Nethermind/Nethermind.Synchronization.Test/ForwardHeaderProviderTests.cs index 8fdee4f9018a..78df4b4c558d 100644 --- a/src/Nethermind/Nethermind.Synchronization.Test/ForwardHeaderProviderTests.cs +++ b/src/Nethermind/Nethermind.Synchronization.Test/ForwardHeaderProviderTests.cs @@ -248,6 +248,31 @@ public async Task Cache_block_headers_unless_peer_changed() await newSyncPeer.Received(1).GetBlockHeaders(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()); } + [Test] + public async Task Cache_block_headers_with_disposal() + { + await using IContainer node = CreateNode(); + Context ctx = node.Resolve(); + + ISyncPeer syncPeer = Substitute.For(); + syncPeer.TotalDifficulty.Returns(UInt256.MaxValue); + syncPeer.GetBlockHeaders(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) + .Returns(ci => ctx.ResponseBuilder.BuildHeaderResponse(ci.ArgAt(0), ci.ArgAt(1), Response.AllCorrect)); + + PeerInfo peerInfo = new(syncPeer); + syncPeer.HeadNumber.Returns(1000); + ctx.ConfigureBestPeer(peerInfo); + + IForwardHeaderProvider forwardHeader = ctx.ForwardHeaderProvider; + + using IOwnedReadOnlyList? headers1 = await forwardHeader.GetBlockHeaders(0, 128, CancellationToken.None); + headers1.Should().NotBeNull(); + using IOwnedReadOnlyList? headers2 = await forwardHeader.GetBlockHeaders(0, 128, CancellationToken.None); + headers2.Should().NotBeNull(); + + await syncPeer.Received(1).GetBlockHeaders(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()); + } + private class SlowSealValidator : ISealValidator { public bool ValidateParams(BlockHeader parent, BlockHeader header, bool isUncle = false) diff --git a/src/Nethermind/Nethermind.Synchronization/Blocks/PowForwardHeaderProvider.cs b/src/Nethermind/Nethermind.Synchronization/Blocks/PowForwardHeaderProvider.cs index 640252a7f686..b2905f365de2 100644 --- a/src/Nethermind/Nethermind.Synchronization/Blocks/PowForwardHeaderProvider.cs +++ b/src/Nethermind/Nethermind.Synchronization/Blocks/PowForwardHeaderProvider.cs @@ -116,7 +116,7 @@ private IOwnedReadOnlyList? LastResponseBatch } LastResponseBatch = newResponse; - return LastResponseBatch; + return newResponse.ToPooledList(newResponse.Count); } private void OnNewBestPeer(PeerInfo newBestPeer)