diff options
| author | eZio Pan <[email protected]> | 2023-12-22 00:19:00 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-12-22 00:19:00 +0800 |
| commit | d7e517e2d32c590e62e3e3339e191d19ce764c12 (patch) | |
| tree | 3862995264a953b224557353bd37c38e83f92f95 /embassy-sync/src | |
| parent | 05b8818de01866fa988a8f65a395690f02176b34 (diff) | |
| parent | 87c03037e320ce30c0cd34fe97e0365e1b11aa9a (diff) | |
Merge branch 'main' into stm32f4-example-ws2812-spi
Diffstat (limited to 'embassy-sync/src')
| -rw-r--r-- | embassy-sync/src/signal.rs | 14 |
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| { |
