diff --git a/p2p/src/protocol.rs b/p2p/src/protocol.rs index 0345e9e5d..b8cd75b58 100644 --- a/p2p/src/protocol.rs +++ b/p2p/src/protocol.rs @@ -229,16 +229,17 @@ impl MessageHandler for Protocol { total_bytes_read += bytes_read; // Read chunks of headers off the stream and pass them off to the adapter. - let chunk_size = 32; - for chunk in (0..count).collect::<Vec<_>>().chunks(chunk_size) { - let mut headers = vec![]; - for _ in chunk { - let (header, bytes_read) = - msg.streaming_read::<core::UntrustedBlockHeader>()?; - headers.push(header.into()); - total_bytes_read += bytes_read; + let chunk_size = 32u16; + let mut headers = Vec::with_capacity(chunk_size as usize); + for i in 1..=count { + let (header, bytes_read) = + msg.streaming_read::<core::UntrustedBlockHeader>()?; + headers.push(header.into()); + total_bytes_read += bytes_read; + if i % chunk_size == 0 || i == count { + adapter.headers_received(&headers, &self.peer_info)?; + headers.clear(); } - adapter.headers_received(&headers, &self.peer_info)?; } // Now check we read the correct total number of bytes off the stream.