diff options
| author | sodo <[email protected]> | 2024-01-02 01:37:00 +0900 |
|---|---|---|
| committer | sodo <[email protected]> | 2024-01-02 13:34:22 +0900 |
| commit | 6ee153a3e2eec284c0d9d87f31801265c0604f74 (patch) | |
| tree | 8b801cbd15f9ad5052d5942c731e75736dc9d7eb /embassy-sync | |
| parent | b7cd7952c890f585ff876c622482534e5d58d4a4 (diff) | |
| parent | 0be9b0599aaf2e425d76ec7852ff4b3535defddf (diff) | |
Merge remote-tracking branch 'origin'
Diffstat (limited to 'embassy-sync')
| -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| { |
