aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2025-01-26 15:43:07 +0000
committerGitHub <[email protected]>2025-01-26 15:43:07 +0000
commit7db46771b8ad14467f759c98d604bfaf9e3b5e01 (patch)
tree725cfe3cdc411f447193bfbcc5cea88d70a7dd73
parentef78441ec1721183ed30f9f21e6bd059f582bd2b (diff)
parente2ddba92f7f3f9e64da10e8351e335989f388109 (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.rs3
-rw-r--r--embassy-sync/src/priority_channel.rs3
-rw-r--r--embassy-sync/src/pubsub/mod.rs3
-rw-r--r--embassy-sync/src/zerocopy_channel.rs3
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;