diff options
| author | Rasmus Melchior Jacobsen <[email protected]> | 2023-12-20 08:37:15 +0100 |
|---|---|---|
| committer | Rasmus Melchior Jacobsen <[email protected]> | 2023-12-20 08:37:15 +0100 |
| commit | f9d0daad80827dd1b379ca727a2e27870a497122 (patch) | |
| tree | 445b797e2104c54d904322b5444efaee636844f0 | |
| parent | 97e919ea64402519153459fbd977d5b2630d4286 (diff) | |
feat(embassy-sync): Add try_take() to signal
| -rw-r--r-- | embassy-sync/src/signal.rs | 11 |
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| { |
