[rialto] Enable rialto to receive messages longer than recv buffer
This cl allows rialto to receive messages longer then the receive
buffer of the connection manager. It achieves this by sending a
credit update to the peer when the receive buffer is empty.
Test: atest rialto_test
Bug: 292080257
Change-Id: Ia301d12b200c967e00796695748ff6cd9334b44d
diff --git a/rialto/src/communication.rs b/rialto/src/communication.rs
index 50722f2..1b94912 100644
--- a/rialto/src/communication.rs
+++ b/rialto/src/communication.rs
@@ -100,7 +100,16 @@
}
fn recv(&mut self, buffer: &mut [u8]) -> virtio_drivers::Result<usize> {
- self.connection_manager.recv(self.peer_addr, self.peer_addr.port, buffer)
+ let bytes_read =
+ self.connection_manager.recv(self.peer_addr, self.peer_addr.port, buffer)?;
+
+ let buffer_available_bytes = self
+ .connection_manager
+ .recv_buffer_available_bytes(self.peer_addr, self.peer_addr.port)?;
+ if buffer_available_bytes == 0 && bytes_read > 0 {
+ self.connection_manager.update_credit(self.peer_addr, self.peer_addr.port)?;
+ }
+ Ok(bytes_read)
}
fn wait_for_send(&mut self, buffer: &[u8]) -> virtio_drivers::Result {