diff options
| author | Ulf Lilleengen <[email protected]> | 2024-12-04 13:26:44 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-12-04 13:26:44 +0000 |
| commit | af02310edc60c568368d2e8805bb07a0797723a8 (patch) | |
| tree | 72461bc7de95bd616ce94176f2d79821afc4908c | |
| parent | 02ba6cd6c81ac1174287bbad1efd4fd68ad13aa3 (diff) | |
| parent | 6065bc63021224b5d3650ad204b387eb622fd8c6 (diff) | |
Merge pull request #3603 from embassy-rs/nrf91-free-bufs
Free tx buffer on ipc send failure
| -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> { |
