diff options
| author | Zoey Riordan <[email protected]> | 2022-08-30 15:57:38 +0200 |
|---|---|---|
| committer | Zoey Riordan <[email protected]> | 2022-08-30 15:57:38 +0200 |
| commit | 171077bacf2a289dae115e0db00c37f3a721df53 (patch) | |
| tree | a1f40226c29d0f911626fe9c332fbb3a246c0f6d | |
| parent | b2720117c455bd0d3781f287446f86db2d94f8e4 (diff) | |
Avoid double-borrow
| -rw-r--r-- | embassy-nrf/src/buffered_uarte.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/embassy-nrf/src/buffered_uarte.rs b/embassy-nrf/src/buffered_uarte.rs index 385dc7e4e..c3cba2470 100644 --- a/embassy-nrf/src/buffered_uarte.rs +++ b/embassy-nrf/src/buffered_uarte.rs | |||
| @@ -207,7 +207,8 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> { | |||
| 207 | async fn inner_read<'a>(&'a self, buf: &'a mut [u8]) -> Result<usize, core::convert::Infallible> { | 207 | async fn inner_read<'a>(&'a self, buf: &'a mut [u8]) -> Result<usize, core::convert::Infallible> { |
| 208 | poll_fn(move |cx| { | 208 | poll_fn(move |cx| { |
| 209 | let mut do_pend = false; | 209 | let mut do_pend = false; |
| 210 | let res = self.inner.borrow_mut().with(|state| { | 210 | let mut inner = self.inner.borrow_mut(); |
| 211 | let res = inner.with(|state| { | ||
| 211 | compiler_fence(Ordering::SeqCst); | 212 | compiler_fence(Ordering::SeqCst); |
| 212 | trace!("poll_read"); | 213 | trace!("poll_read"); |
| 213 | 214 | ||
| @@ -227,7 +228,7 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> { | |||
| 227 | Poll::Pending | 228 | Poll::Pending |
| 228 | }); | 229 | }); |
| 229 | if do_pend { | 230 | if do_pend { |
| 230 | self.inner.borrow().pend(); | 231 | inner.pend(); |
| 231 | } | 232 | } |
| 232 | 233 | ||
| 233 | res | 234 | res |
| @@ -237,7 +238,8 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> { | |||
| 237 | 238 | ||
| 238 | async fn inner_write<'a>(&'a self, buf: &'a [u8]) -> Result<usize, core::convert::Infallible> { | 239 | async fn inner_write<'a>(&'a self, buf: &'a [u8]) -> Result<usize, core::convert::Infallible> { |
| 239 | poll_fn(move |cx| { | 240 | poll_fn(move |cx| { |
| 240 | let res = self.inner.borrow_mut().with(|state| { | 241 | let mut inner = self.inner.borrow_mut(); |
| 242 | let res = inner.with(|state| { | ||
| 241 | trace!("poll_write: {:?}", buf.len()); | 243 | trace!("poll_write: {:?}", buf.len()); |
| 242 | 244 | ||
| 243 | let tx_buf = state.tx.push_buf(); | 245 | let tx_buf = state.tx.push_buf(); |
| @@ -258,7 +260,7 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> { | |||
| 258 | Poll::Ready(Ok(n)) | 260 | Poll::Ready(Ok(n)) |
| 259 | }); | 261 | }); |
| 260 | 262 | ||
| 261 | self.inner.borrow_mut().pend(); | 263 | inner.pend(); |
| 262 | 264 | ||
| 263 | res | 265 | res |
| 264 | }) | 266 | }) |
| @@ -307,13 +309,14 @@ impl<'d, U: UarteInstance, T: TimerInstance> BufferedUarte<'d, U, T> { | |||
| 307 | } | 309 | } |
| 308 | 310 | ||
| 309 | fn inner_consume(&self, amt: usize) { | 311 | fn inner_consume(&self, amt: usize) { |
| 310 | let signal = self.inner.borrow_mut().with(|state| { | 312 | let mut inner = self.inner.borrow_mut(); |
| 313 | let signal = inner.with(|state| { | ||
| 311 | let full = state.rx.is_full(); | 314 | let full = state.rx.is_full(); |
| 312 | state.rx.pop(amt); | 315 | state.rx.pop(amt); |
| 313 | full | 316 | full |
| 314 | }); | 317 | }); |
| 315 | if signal { | 318 | if signal { |
| 316 | self.inner.borrow().pend(); | 319 | inner.pend(); |
| 317 | } | 320 | } |
| 318 | } | 321 | } |
| 319 | } | 322 | } |
