diff --git a/consensus/src/ordered_broadcast/engine.rs b/consensus/src/ordered_broadcast/engine.rs index 51ffb20976..478aa862f1 100644 --- a/consensus/src/ordered_broadcast/engine.rs +++ b/consensus/src/ordered_broadcast/engine.rs @@ -838,7 +838,7 @@ impl< node_sender .send( Recipients::Some(validators.iter().cloned().collect()), - node.encode(), + node.encode().freeze(), self.priority_proposals, ) .await diff --git a/examples/sync/src/bin/server.rs b/examples/sync/src/bin/server.rs index 488c8af309..86b53b3232 100644 --- a/examples/sync/src/bin/server.rs +++ b/examples/sync/src/bin/server.rs @@ -346,7 +346,7 @@ where outgoing = response_receiver.next() => { if let Some(response) = outgoing { // We have a response to send to the client. - let response_data = response.encode(); + let response_data = response.encode().freeze(); if let Err(err) = send_frame(&mut sink, response_data, MAX_MESSAGE_SIZE).await { info!(client_addr = %client_addr, ?err, "send failed (client likely disconnected)"); state.error_counter.inc(); diff --git a/examples/sync/src/net/io.rs b/examples/sync/src/net/io.rs index 1d378bcce9..0bf80598b7 100644 --- a/examples/sync/src/net/io.rs +++ b/examples/sync/src/net/io.rs @@ -45,7 +45,7 @@ async fn run_loop( Some(Request { request, response_tx }) => { let request_id = request.request_id(); pending_requests.insert(request_id, response_tx); - let data = request.encode(); + let data = request.encode().freeze(); if let Err(e) = send_frame(&mut sink, data, MAX_MESSAGE_SIZE).await { if let Some(sender) = pending_requests.remove(&request_id) { let _ = sender.send(Err(Error::Network(e))); diff --git a/p2p/src/utils/mux.rs b/p2p/src/utils/mux.rs index a4a19d33dc..3f0f90ea99 100644 --- a/p2p/src/utils/mux.rs +++ b/p2p/src/utils/mux.rs @@ -359,7 +359,7 @@ impl<'a, S: Sender> CheckedSender for CheckedGlobalSender<'a, S> { ) -> Result, Self::Error> { let subchannel = UInt(self.subchannel.expect("subchannel not set")); self.inner - .send(subchannel.encode().chain(message), priority) + .send(subchannel.encode().freeze().chain(message), priority) .await } } diff --git a/runtime/src/network/iouring.rs b/runtime/src/network/iouring.rs index 38a6f6a0d0..617b5bad5c 100644 --- a/runtime/src/network/iouring.rs +++ b/runtime/src/network/iouring.rs @@ -242,8 +242,7 @@ impl Sink { impl crate::Sink for Sink { async fn send(&mut self, mut msg: impl Buf + Send) -> Result<(), crate::Error> { - // For now, collect the message into a stable buffer. In the future, - // we could optimize this by using writev w/ a keepalive for the iovecs. + // TODO(#2705): Use writev to avoid this copy. let mut msg: StableBuf = { let buf = msg.copy_to_bytes(msg.remaining()); BytesMut::from(buf).into()