From 3489574603530ac6834a14695cdbe7a5b9068d21 Mon Sep 17 00:00:00 2001 From: Michael Watzko Date: Fri, 16 Apr 2021 01:24:51 +0200 Subject: [PATCH] Recent only relevant socket interrupt flags to not loose in-flight data --- src/udp.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/udp.rs b/src/udp.rs index 8b1d9b7..63c6087 100644 --- a/src/udp.rs +++ b/src/udp.rs @@ -61,13 +61,15 @@ impl UdpSocket { loop { if self.socket.get_tx_read_pointer(bus)? == self.socket.get_tx_write_pointer(bus)? { if self.socket.has_interrupt(bus, socketn::Interrupt::SendOk)? { - self.socket.reset_interrupt(bus, socketn::Interrupt::All)?; + self.socket + .reset_interrupt(bus, socketn::Interrupt::SendOk)?; return Ok(()); } else if self .socket .has_interrupt(bus, socketn::Interrupt::Timeout)? { - self.socket.reset_interrupt(bus, socketn::Interrupt::All)?; + self.socket + .reset_interrupt(bus, socketn::Interrupt::Timeout)?; return Err(NbError::Other(UdpSocketError::WriteTimeout)); } } @@ -125,6 +127,8 @@ impl UdpSocket { .set_rx_read_pointer(bus, tx_write_pointer) .and_then(|_| self.socket.command(bus, socketn::Command::Receive)) .and_then(|_| self.socket.command(bus, socketn::Command::Open))?; + self.socket + .reset_interrupt(bus, socketn::Interrupt::Receive)?; Ok((packet_size, remote)) }