aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Lilleengen <[email protected]>2025-12-02 08:28:23 +0000
committerGitHub <[email protected]>2025-12-02 08:28:23 +0000
commit424522b0975b449bc62854c271b196cd9ed192d7 (patch)
treeca5fbd4a7487db62dc44a5f3994a80efc8048331
parentc46a6c2dcf86bd0840ce4ba6034011fdd9f669a8 (diff)
parentf59e1eed24b0bff3619e0e8536b8e35d468858e9 (diff)
Merge pull request #4963 from chrisdoble/main
Fix a bug where CDC ACM BufferedReceiver repeats data when its future is dropped
-rw-r--r--embassy-usb/CHANGELOG.md1
-rw-r--r--embassy-usb/src/class/cdc_acm.rs7
2 files changed, 6 insertions, 2 deletions
diff --git a/embassy-usb/CHANGELOG.md b/embassy-usb/CHANGELOG.md
index 3dd71ffbc..f90875166 100644
--- a/embassy-usb/CHANGELOG.md
+++ b/embassy-usb/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
10 10
11- Add support for USB HID Boot Protocol Mode 11- Add support for USB HID Boot Protocol Mode
12- Bump usbd-hid from 0.8.1 to 0.9.0 12- Bump usbd-hid from 0.8.1 to 0.9.0
13- Fix a bug where CDC ACM BufferedReceiver repeats data when its future is dropped
13 14
14## 0.5.1 - 2025-08-26 15## 0.5.1 - 2025-08-26
15 16
diff --git a/embassy-usb/src/class/cdc_acm.rs b/embassy-usb/src/class/cdc_acm.rs
index 388e21fbd..c990b679e 100644
--- a/embassy-usb/src/class/cdc_acm.rs
+++ b/embassy-usb/src/class/cdc_acm.rs
@@ -545,9 +545,12 @@ impl<'d, D: Driver<'d>> embedded_io_async::Read for BufferedReceiver<'d, D> {
545 return self.receiver.read_packet(buf).await; 545 return self.receiver.read_packet(buf).await;
546 } 546 }
547 547
548 // Otherwise read a packet into the internal buffer, and return some of it to the caller 548 // Otherwise read a packet into the internal buffer, and return some of it to the caller.
549 self.start = 0; 549 //
550 // It's important that `start` and `end` be updated in this order so they're left in a
551 // consistent state if the `read` future is dropped mid-execution, e.g. from a timeout.
550 self.end = self.receiver.read_packet(&mut self.buffer).await?; 552 self.end = self.receiver.read_packet(&mut self.buffer).await?;
553 self.start = 0;
551 return Ok(self.read_from_buffer(buf)); 554 return Ok(self.read_from_buffer(buf));
552 } 555 }
553} 556}