aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZoey Riordan <[email protected]>2022-08-30 15:57:38 +0200
committerZoey Riordan <[email protected]>2022-08-30 15:57:38 +0200
commit171077bacf2a289dae115e0db00c37f3a721df53 (patch)
treea1f40226c29d0f911626fe9c332fbb3a246c0f6d
parentb2720117c455bd0d3781f287446f86db2d94f8e4 (diff)
Avoid double-borrow
-rw-r--r--embassy-nrf/src/buffered_uarte.rs15
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}