Skip to content

Commit d6f83c5

Browse files
committed
Handle non-WouldBlock errors in smoltcp::phy::Device implemenation
1 parent 374a899 commit d6f83c5

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

src/dma/smoltcp_phy.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use crate::dma::RxError;
2+
13
use super::rx::RxRing;
24
use super::tx::TxRing;
35
use super::EthernetDMA;
@@ -90,11 +92,23 @@ impl<'dma, 'rx> RxToken for EthRxToken<'dma, 'rx> {
9092
#[cfg(not(feature = "ptp"))]
9193
let meta = None;
9294

93-
// NOTE(unwrap): an `EthRxToken` is only created when `eth.rx_available()`
94-
let packet = self.rx_ring.recv_next(meta).ok().unwrap();
95-
let result = f(&packet);
96-
packet.free();
97-
result
95+
match self.rx_ring.recv_next(meta) {
96+
Ok(v) => {
97+
let result = f(&v);
98+
v.free();
99+
result
100+
}
101+
Err(RxError::WouldBlock) => {
102+
#[cfg(feature = "defmt")]
103+
defmt::error!("RX would block.");
104+
f(&[])
105+
}
106+
Err(_e) => {
107+
#[cfg(feature = "defmt")]
108+
defmt::debug!("Failed to receive packet: {}", _e);
109+
f(&[])
110+
}
111+
}
98112
}
99113

100114
#[cfg(feature = "ptp")]

0 commit comments

Comments
 (0)