diff options
Diffstat (limited to 'embassy-usb/src/class/cdc_acm.rs')
| -rw-r--r-- | embassy-usb/src/class/cdc_acm.rs | 7 |
1 files changed, 5 insertions, 2 deletions
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 | } |
