aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhuntc <[email protected]>2021-07-06 23:51:47 +1000
committerhuntc <[email protected]>2021-07-15 12:31:52 +1000
commita156f72bfba854087afd17f4769060577417698a (patch)
tree8892cfc24048d5d9cf02cc445ea8c677c826eaca
parent816b78c0d9733362d8653eb2032f126e6a710030 (diff)
Improves the representation of side effects
-rw-r--r--embassy/src/util/mpsc.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/embassy/src/util/mpsc.rs b/embassy/src/util/mpsc.rs
index d8a010d7d..f09bcedbc 100644
--- a/embassy/src/util/mpsc.rs
+++ b/embassy/src/util/mpsc.rs
@@ -492,7 +492,9 @@ where
492 if state.read_pos != state.write_pos || state.full { 492 if state.read_pos != state.write_pos || state.full {
493 if state.full { 493 if state.full {
494 state.full = false; 494 state.full = false;
495 state.senders_waker.take().map(|w| w.wake()); 495 if let Some(w) = state.senders_waker.take() {
496 w.wake();
497 }
496 } 498 }
497 let message = 499 let message =
498 unsafe { (state.buf[state.read_pos]).assume_init_mut().get().read() }; 500 unsafe { (state.buf[state.read_pos]).assume_init_mut().get().read() };
@@ -502,7 +504,9 @@ where
502 Err(TryRecvError::Empty) 504 Err(TryRecvError::Empty)
503 } else { 505 } else {
504 state.closed = true; 506 state.closed = true;
505 state.senders_waker.take().map(|w| w.wake()); 507 if let Some(w) = state.senders_waker.take() {
508 w.wake();
509 }
506 Err(TryRecvError::Closed) 510 Err(TryRecvError::Closed)
507 } 511 }
508 } else { 512 } else {
@@ -521,7 +525,9 @@ where
521 if state.write_pos == state.read_pos { 525 if state.write_pos == state.read_pos {
522 state.full = true; 526 state.full = true;
523 } 527 }
524 state.receiver_waker.take().map(|w| w.wake()); 528 if let Some(w) = state.receiver_waker.take() {
529 w.wake();
530 }
525 Ok(()) 531 Ok(())
526 } else { 532 } else {
527 Err(TrySendError::Full(message)) 533 Err(TrySendError::Full(message))
@@ -535,7 +541,9 @@ where
535 fn close(&mut self) { 541 fn close(&mut self) {
536 let state = &mut self.state; 542 let state = &mut self.state;
537 self.mutex.lock(|_| { 543 self.mutex.lock(|_| {
538 state.receiver_waker.take().map(|w| w.wake()); 544 if let Some(w) = state.receiver_waker.take() {
545 w.wake();
546 }
539 state.closing = true; 547 state.closing = true;
540 }); 548 });
541 } 549 }
@@ -558,7 +566,9 @@ where
558 self.mutex.lock(|_| { 566 self.mutex.lock(|_| {
559 if state.receiver_registered { 567 if state.receiver_registered {
560 state.closed = true; 568 state.closed = true;
561 state.senders_waker.take().map(|w| w.wake()); 569 if let Some(w) = state.senders_waker.take() {
570 w.wake();
571 }
562 } 572 }
563 state.receiver_registered = false; 573 state.receiver_registered = false;
564 }) 574 })
@@ -577,7 +587,9 @@ where
577 assert!(state.senders_registered > 0); 587 assert!(state.senders_registered > 0);
578 state.senders_registered = state.senders_registered - 1; 588 state.senders_registered = state.senders_registered - 1;
579 if state.senders_registered == 0 { 589 if state.senders_registered == 0 {
580 state.receiver_waker.take().map(|w| w.wake()); 590 if let Some(w) = state.receiver_waker.take() {
591 w.wake();
592 }
581 state.closing = true; 593 state.closing = true;
582 } 594 }
583 }) 595 })