diff options
| author | Dario Nieuwenhuis <[email protected]> | 2025-01-26 15:43:07 +0000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-01-26 15:43:07 +0000 |
| commit | 7db46771b8ad14467f759c98d604bfaf9e3b5e01 (patch) | |
| tree | 725cfe3cdc411f447193bfbcc5cea88d70a7dd73 | |
| parent | ef78441ec1721183ed30f9f21e6bd059f582bd2b (diff) | |
| parent | e2ddba92f7f3f9e64da10e8351e335989f388109 (diff) | |
Merge pull request #3807 from ibuki2003/sync-channel-clear-wakeup
embassy-sync: fix clear() to wake senders
| -rw-r--r-- | embassy-sync/src/channel.rs | 3 | ||||
| -rw-r--r-- | embassy-sync/src/priority_channel.rs | 3 | ||||
| -rw-r--r-- | embassy-sync/src/pubsub/mod.rs | 3 | ||||
| -rw-r--r-- | embassy-sync/src/zerocopy_channel.rs | 3 |
4 files changed, 12 insertions, 0 deletions
diff --git a/embassy-sync/src/channel.rs b/embassy-sync/src/channel.rs index 18b053111..9a7d2fa2f 100644 --- a/embassy-sync/src/channel.rs +++ b/embassy-sync/src/channel.rs | |||
| @@ -562,6 +562,9 @@ impl<T, const N: usize> ChannelState<T, N> { | |||
| 562 | } | 562 | } |
| 563 | 563 | ||
| 564 | fn clear(&mut self) { | 564 | fn clear(&mut self) { |
| 565 | if self.queue.is_full() { | ||
| 566 | self.senders_waker.wake(); | ||
| 567 | } | ||
| 565 | self.queue.clear(); | 568 | self.queue.clear(); |
| 566 | } | 569 | } |
| 567 | 570 | ||
diff --git a/embassy-sync/src/priority_channel.rs b/embassy-sync/src/priority_channel.rs index d466a22ff..36959204f 100644 --- a/embassy-sync/src/priority_channel.rs +++ b/embassy-sync/src/priority_channel.rs | |||
| @@ -411,6 +411,9 @@ where | |||
| 411 | } | 411 | } |
| 412 | 412 | ||
| 413 | fn clear(&mut self) { | 413 | fn clear(&mut self) { |
| 414 | if self.queue.len() == self.queue.capacity() { | ||
| 415 | self.senders_waker.wake(); | ||
| 416 | } | ||
| 414 | self.queue.clear(); | 417 | self.queue.clear(); |
| 415 | } | 418 | } |
| 416 | 419 | ||
diff --git a/embassy-sync/src/pubsub/mod.rs b/embassy-sync/src/pubsub/mod.rs index a2360a1d8..606efff0a 100644 --- a/embassy-sync/src/pubsub/mod.rs +++ b/embassy-sync/src/pubsub/mod.rs | |||
| @@ -421,6 +421,9 @@ impl<T: Clone, const CAP: usize, const SUBS: usize, const PUBS: usize> PubSubSta | |||
| 421 | } | 421 | } |
| 422 | 422 | ||
| 423 | fn clear(&mut self) { | 423 | fn clear(&mut self) { |
| 424 | if self.is_full() { | ||
| 425 | self.publisher_wakers.wake(); | ||
| 426 | } | ||
| 424 | self.queue.clear(); | 427 | self.queue.clear(); |
| 425 | } | 428 | } |
| 426 | 429 | ||
diff --git a/embassy-sync/src/zerocopy_channel.rs b/embassy-sync/src/zerocopy_channel.rs index 56433cd8a..15914578e 100644 --- a/embassy-sync/src/zerocopy_channel.rs +++ b/embassy-sync/src/zerocopy_channel.rs | |||
| @@ -287,6 +287,9 @@ impl State { | |||
| 287 | } | 287 | } |
| 288 | 288 | ||
| 289 | fn clear(&mut self) { | 289 | fn clear(&mut self) { |
| 290 | if self.full { | ||
| 291 | self.receive_waker.wake(); | ||
| 292 | } | ||
| 290 | self.front = 0; | 293 | self.front = 0; |
| 291 | self.back = 0; | 294 | self.back = 0; |
| 292 | self.full = false; | 295 | self.full = false; |
