aboutsummaryrefslogtreecommitdiff
path: root/embassy-sync/src
diff options
context:
space:
mode:
authoribuki2003 <[email protected]>2025-01-26 17:23:41 +0900
committeribuki2003 <[email protected]>2025-01-26 17:23:41 +0900
commite2ddba92f7f3f9e64da10e8351e335989f388109 (patch)
treec6d7e38197da8576b5718611bdeb8eb0c03d52fb /embassy-sync/src
parent51d87c6603631fda6fb59ca1a65a99c08138b081 (diff)
embassy-sync: fix clear() to wake senders
Diffstat (limited to 'embassy-sync/src')
-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;