aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRasmus Melchior Jacobsen <[email protected]>2023-12-20 08:37:15 +0100
committerRasmus Melchior Jacobsen <[email protected]>2023-12-20 08:37:15 +0100
commitf9d0daad80827dd1b379ca727a2e27870a497122 (patch)
tree445b797e2104c54d904322b5444efaee636844f0
parent97e919ea64402519153459fbd977d5b2630d4286 (diff)
feat(embassy-sync): Add try_take() to signal
-rw-r--r--embassy-sync/src/signal.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/embassy-sync/src/signal.rs b/embassy-sync/src/signal.rs
index bea67d8be..97d76b463 100644
--- a/embassy-sync/src/signal.rs
+++ b/embassy-sync/src/signal.rs
@@ -111,6 +111,17 @@ where
111 poll_fn(move |cx| self.poll_wait(cx)) 111 poll_fn(move |cx| self.poll_wait(cx))
112 } 112 }
113 113
114 /// non-blocking method to try and take the signal value.
115 pub fn try_take(&self) -> Option<T> {
116 self.state.lock(|cell| {
117 let state = cell.replace(State::None);
118 match state {
119 State::Signaled(res) => Some(res),
120 _ => None,
121 }
122 })
123 }
124
114 /// non-blocking method to check whether this signal has been signaled. 125 /// non-blocking method to check whether this signal has been signaled.
115 pub fn signaled(&self) -> bool { 126 pub fn signaled(&self) -> bool {
116 self.state.lock(|cell| { 127 self.state.lock(|cell| {