Skip to content

Commit 4fad4ef

Browse files
committed
Keep the same read buffer unless the last message was overly large
This avoids repeatedly deallocating-allocating a Vec for the peer read buffer after every message/header.
1 parent 3fd2d26 commit 4fad4ef

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

lightning/src/ln/peer_handler.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -924,7 +924,7 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
924924
if peer.pending_read_is_header {
925925
let msg_len = try_potential_handleerror!(peer,
926926
peer.channel_encryptor.decrypt_length_header(&peer.pending_read_buffer[..]));
927-
peer.pending_read_buffer = Vec::with_capacity(msg_len as usize + 16);
927+
if peer.pending_read_buffer.capacity() > 8192 { peer.pending_read_buffer = Vec::new(); }
928928
peer.pending_read_buffer.resize(msg_len as usize + 16, 0);
929929
if msg_len < 2 { // Need at least the message type tag
930930
return Err(PeerHandleError{ no_connection_possible: false });
@@ -936,7 +936,8 @@ impl<Descriptor: SocketDescriptor, CM: Deref, RM: Deref, L: Deref, CMH: Deref> P
936936
assert!(msg_data.len() >= 2);
937937

938938
// Reset read buffer
939-
peer.pending_read_buffer = [0; 18].to_vec();
939+
if peer.pending_read_buffer.capacity() > 8192 { peer.pending_read_buffer = Vec::new(); }
940+
peer.pending_read_buffer.resize(18, 0);
940941
peer.pending_read_is_header = true;
941942

942943
let mut reader = io::Cursor::new(&msg_data[..]);

0 commit comments

Comments
 (0)