diff options
| author | Ulf Lilleengen <[email protected]> | 2024-12-03 15:13:22 +0100 |
|---|---|---|
| committer | Ulf Lilleengen <[email protected]> | 2024-12-03 15:14:14 +0100 |
| commit | 6065bc63021224b5d3650ad204b387eb622fd8c6 (patch) | |
| tree | 8f11f8f41b1c5539fba7da2f43eb6d84ad6281b5 /embassy-net-nrf91 | |
| parent | 4acc0f84b084235b576de3b9e1d12a3472a5274b (diff) | |
Free tx buffer on ipc send failure
Diffstat (limited to 'embassy-net-nrf91')
| -rw-r--r-- | embassy-net-nrf91/src/lib.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/embassy-net-nrf91/src/lib.rs b/embassy-net-nrf91/src/lib.rs index 80d08f7f5..110d0ff24 100644 --- a/embassy-net-nrf91/src/lib.rs +++ b/embassy-net-nrf91/src/lib.rs | |||
| @@ -507,6 +507,7 @@ impl StateInner { | |||
| 507 | if data.is_empty() { | 507 | if data.is_empty() { |
| 508 | msg.data = ptr::null_mut(); | 508 | msg.data = ptr::null_mut(); |
| 509 | msg.data_len = 0; | 509 | msg.data_len = 0; |
| 510 | self.send_message_raw(msg) | ||
| 510 | } else { | 511 | } else { |
| 511 | assert!(data.len() <= TX_BUF_SIZE); | 512 | assert!(data.len() <= TX_BUF_SIZE); |
| 512 | let buf_idx = self.find_free_tx_buf().ok_or(NoFreeBufs)?; | 513 | let buf_idx = self.find_free_tx_buf().ok_or(NoFreeBufs)?; |
| @@ -517,10 +518,15 @@ impl StateInner { | |||
| 517 | self.tx_buf_used[buf_idx] = true; | 518 | self.tx_buf_used[buf_idx] = true; |
| 518 | 519 | ||
| 519 | fence(Ordering::SeqCst); // synchronize copy_nonoverlapping (non-volatile) with volatile writes below. | 520 | fence(Ordering::SeqCst); // synchronize copy_nonoverlapping (non-volatile) with volatile writes below. |
| 521 | if let Err(e) = self.send_message_raw(msg) { | ||
| 522 | msg.data = ptr::null_mut(); | ||
| 523 | msg.data_len = 0; | ||
| 524 | self.tx_buf_used[buf_idx] = false; | ||
| 525 | Err(e) | ||
| 526 | } else { | ||
| 527 | Ok(()) | ||
| 528 | } | ||
| 520 | } | 529 | } |
| 521 | |||
| 522 | // TODO free data buf if send_message_raw fails. | ||
| 523 | self.send_message_raw(msg) | ||
| 524 | } | 530 | } |
| 525 | 531 | ||
| 526 | fn send_message_raw(&mut self, msg: &Message) -> Result<(), NoFreeBufs> { | 532 | fn send_message_raw(&mut self, msg: &Message) -> Result<(), NoFreeBufs> { |
