Skip to content

Commit 17621c4

Browse files
committed
Handle non-WouldBlock errors in smoltcp::phy::Device implemenation
1 parent 47441de commit 17621c4

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;
@@ -86,11 +88,23 @@ impl<'dma, 'rx> RxToken for EthRxToken<'dma, 'rx> {
8688
#[cfg(not(feature = "ptp"))]
8789
let meta = None;
8890

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

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

0 commit comments

Comments
 (0)