aboutsummaryrefslogtreecommitdiff
path: root/embassy-sync/src
diff options
context:
space:
mode:
authoreZio Pan <[email protected]>2023-12-22 00:19:00 +0800
committerGitHub <[email protected]>2023-12-22 00:19:00 +0800
commitd7e517e2d32c590e62e3e3339e191d19ce764c12 (patch)
tree3862995264a953b224557353bd37c38e83f92f95 /embassy-sync/src
parent05b8818de01866fa988a8f65a395690f02176b34 (diff)
parent87c03037e320ce30c0cd34fe97e0365e1b11aa9a (diff)
Merge branch 'main' into stm32f4-example-ws2812-spi
Diffstat (limited to 'embassy-sync/src')
-rw-r--r--embassy-sync/src/signal.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/embassy-sync/src/signal.rs b/embassy-sync/src/signal.rs
index bea67d8be..d75750ce7 100644
--- a/embassy-sync/src/signal.rs
+++ b/embassy-sync/src/signal.rs
@@ -111,6 +111,20 @@ 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 state => {
121 cell.set(state);
122 None
123 }
124 }
125 })
126 }
127
114 /// non-blocking method to check whether this signal has been signaled. 128 /// non-blocking method to check whether this signal has been signaled.
115 pub fn signaled(&self) -> bool { 129 pub fn signaled(&self) -> bool {
116 self.state.lock(|cell| { 130 self.state.lock(|cell| {