aboutsummaryrefslogtreecommitdiff
path: root/embassy-sync
diff options
context:
space:
mode:
authormaor malka <[email protected]>2025-09-23 21:44:21 -0400
committermaor malka <[email protected]>2025-09-23 21:44:21 -0400
commitf701fc411726c57a86c0b50c649cb8bf236e7c1a (patch)
tree61a48ac36528e7c7ae9cdbe1c22c985e8bde5a2b /embassy-sync
parentacc3c4b98c5238950640409d6a8ab6029edda3c9 (diff)
parent56019ba197443e16b4f0b3a0fe3ff85985f6e45c (diff)
Merge remote-tracking branch 'upstream/main'
Diffstat (limited to 'embassy-sync')
-rw-r--r--embassy-sync/CHANGELOG.md1
-rw-r--r--embassy-sync/Cargo.toml4
-rw-r--r--embassy-sync/src/blocking_mutex/mod.rs4
-rw-r--r--embassy-sync/src/blocking_mutex/raw.rs4
-rw-r--r--embassy-sync/src/mutex.rs4
-rw-r--r--embassy-sync/src/rwlock.rs2
-rw-r--r--embassy-sync/tests/ui/sync_impl/lazy_lock_function.stderr8
7 files changed, 15 insertions, 12 deletions
diff --git a/embassy-sync/CHANGELOG.md b/embassy-sync/CHANGELOG.md
index a53d5f5b1..242b8b7ab 100644
--- a/embassy-sync/CHANGELOG.md
+++ b/embassy-sync/CHANGELOG.md
@@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
8<!-- next-header --> 8<!-- next-header -->
9## Unreleased - ReleaseDate 9## Unreleased - ReleaseDate
10- Fix wakers getting dropped by `Signal::reset` 10- Fix wakers getting dropped by `Signal::reset`
11- Remove `Sized` trait bound from `MutexGuard::map`
11 12
12## 0.7.2 - 2025-08-26 13## 0.7.2 - 2025-08-26
13 14
diff --git a/embassy-sync/Cargo.toml b/embassy-sync/Cargo.toml
index 30a27c13f..64d76baba 100644
--- a/embassy-sync/Cargo.toml
+++ b/embassy-sync/Cargo.toml
@@ -17,6 +17,8 @@ categories = [
17[package.metadata.embassy] 17[package.metadata.embassy]
18build = [ 18build = [
19 {target = "thumbv6m-none-eabi", features = ["defmt"]}, 19 {target = "thumbv6m-none-eabi", features = ["defmt"]},
20 # Xtensa builds
21 {group = "xtensa", build-std = ["core", "alloc"], target = "xtensa-esp32s2-none-elf", features = ["defmt"]},
20] 22]
21 23
22[package.metadata.embassy_docs] 24[package.metadata.embassy_docs]
@@ -25,6 +27,8 @@ src_base_git = "https://github.com/embassy-rs/embassy/blob/$COMMIT/embassy-sync/
25target = "thumbv7em-none-eabi" 27target = "thumbv7em-none-eabi"
26 28
27[features] 29[features]
30defmt = ["dep:defmt"]
31log = ["dep:log"]
28std = [] 32std = []
29turbowakers = [] 33turbowakers = []
30 34
diff --git a/embassy-sync/src/blocking_mutex/mod.rs b/embassy-sync/src/blocking_mutex/mod.rs
index 11809c763..62bfc26fb 100644
--- a/embassy-sync/src/blocking_mutex/mod.rs
+++ b/embassy-sync/src/blocking_mutex/mod.rs
@@ -135,9 +135,9 @@ impl<T> Mutex<raw::NoopRawMutex, T> {
135// There's still a ThreadModeRawMutex for use with the generic Mutex (handy with Channel, for example), 135// There's still a ThreadModeRawMutex for use with the generic Mutex (handy with Channel, for example),
136// but that will require T: Send even though it shouldn't be needed. 136// but that will require T: Send even though it shouldn't be needed.
137 137
138#[cfg(any(cortex_m, feature = "std"))] 138#[cfg(any(cortex_m, doc, feature = "std"))]
139pub use thread_mode_mutex::*; 139pub use thread_mode_mutex::*;
140#[cfg(any(cortex_m, feature = "std"))] 140#[cfg(any(cortex_m, doc, feature = "std"))]
141mod thread_mode_mutex { 141mod thread_mode_mutex {
142 use super::*; 142 use super::*;
143 143
diff --git a/embassy-sync/src/blocking_mutex/raw.rs b/embassy-sync/src/blocking_mutex/raw.rs
index 50f965e00..fbb9ece15 100644
--- a/embassy-sync/src/blocking_mutex/raw.rs
+++ b/embassy-sync/src/blocking_mutex/raw.rs
@@ -89,7 +89,7 @@ unsafe impl RawMutex for NoopRawMutex {
89 89
90// ================ 90// ================
91 91
92#[cfg(any(cortex_m, feature = "std"))] 92#[cfg(any(cortex_m, doc, feature = "std"))]
93mod thread_mode { 93mod thread_mode {
94 use super::*; 94 use super::*;
95 95
@@ -147,5 +147,5 @@ mod thread_mode {
147 return unsafe { (0xE000ED04 as *const u32).read_volatile() } & 0x1FF == 0; 147 return unsafe { (0xE000ED04 as *const u32).read_volatile() } & 0x1FF == 0;
148 } 148 }
149} 149}
150#[cfg(any(cortex_m, feature = "std"))] 150#[cfg(any(cortex_m, doc, feature = "std"))]
151pub use thread_mode::*; 151pub use thread_mode::*;
diff --git a/embassy-sync/src/mutex.rs b/embassy-sync/src/mutex.rs
index 4ce6dd987..aea682899 100644
--- a/embassy-sync/src/mutex.rs
+++ b/embassy-sync/src/mutex.rs
@@ -187,7 +187,7 @@ where
187 T: ?Sized, 187 T: ?Sized,
188{ 188{
189 /// Returns a locked view over a portion of the locked data. 189 /// Returns a locked view over a portion of the locked data.
190 pub fn map<U>(this: Self, fun: impl FnOnce(&mut T) -> &mut U) -> MappedMutexGuard<'a, M, U> { 190 pub fn map<U: ?Sized>(this: Self, fun: impl FnOnce(&mut T) -> &mut U) -> MappedMutexGuard<'a, M, U> {
191 let mutex = this.mutex; 191 let mutex = this.mutex;
192 let value = fun(unsafe { &mut *this.mutex.inner.get() }); 192 let value = fun(unsafe { &mut *this.mutex.inner.get() });
193 // Don't run the `drop` method for MutexGuard. The ownership of the underlying 193 // Don't run the `drop` method for MutexGuard. The ownership of the underlying
@@ -279,7 +279,7 @@ where
279 T: ?Sized, 279 T: ?Sized,
280{ 280{
281 /// Returns a locked view over a portion of the locked data. 281 /// Returns a locked view over a portion of the locked data.
282 pub fn map<U>(this: Self, fun: impl FnOnce(&mut T) -> &mut U) -> MappedMutexGuard<'a, M, U> { 282 pub fn map<U: ?Sized>(this: Self, fun: impl FnOnce(&mut T) -> &mut U) -> MappedMutexGuard<'a, M, U> {
283 let state = this.state; 283 let state = this.state;
284 let value = fun(unsafe { &mut *this.value }); 284 let value = fun(unsafe { &mut *this.value });
285 // Don't run the `drop` method for MutexGuard. The ownership of the underlying 285 // Don't run the `drop` method for MutexGuard. The ownership of the underlying
diff --git a/embassy-sync/src/rwlock.rs b/embassy-sync/src/rwlock.rs
index 0d784a7dc..e43388c4d 100644
--- a/embassy-sync/src/rwlock.rs
+++ b/embassy-sync/src/rwlock.rs
@@ -37,8 +37,6 @@ struct State {
37/// Use [`NoopRawMutex`](crate::blocking_mutex::raw::NoopRawMutex) when data is only shared between tasks running on the same executor. 37/// Use [`NoopRawMutex`](crate::blocking_mutex::raw::NoopRawMutex) when data is only shared between tasks running on the same executor.
38/// 38///
39/// Use [`ThreadModeRawMutex`](crate::blocking_mutex::raw::ThreadModeRawMutex) when data is shared between tasks running on the same executor but you want a singleton. 39/// Use [`ThreadModeRawMutex`](crate::blocking_mutex::raw::ThreadModeRawMutex) when data is shared between tasks running on the same executor but you want a singleton.
40///
41
42pub struct RwLock<M, T> 40pub struct RwLock<M, T>
43where 41where
44 M: RawMutex, 42 M: RawMutex,
diff --git a/embassy-sync/tests/ui/sync_impl/lazy_lock_function.stderr b/embassy-sync/tests/ui/sync_impl/lazy_lock_function.stderr
index daf79ad28..417fb8e31 100644
--- a/embassy-sync/tests/ui/sync_impl/lazy_lock_function.stderr
+++ b/embassy-sync/tests/ui/sync_impl/lazy_lock_function.stderr
@@ -1,10 +1,10 @@
1error[E0277]: `*const u8` cannot be shared between threads safely 1error[E0277]: `*const u8` cannot be shared between threads safely
2 --> tests/ui/sync_impl/lazy_lock_function.rs:8:16 2 --> tests/ui/sync_impl/lazy_lock_function.rs:8:16
3 | 3 |
46 | let closure_capturing_non_sync_variable = || unsafe { core::ptr::read(x_ptr) }; 4 6 | let closure_capturing_non_sync_variable = || unsafe { core::ptr::read(x_ptr) };
5 | -- within this `{closure@$DIR/tests/ui/sync_impl/lazy_lock_function.rs:6:47: 6:49}` 5 | -- within this `{closure@$DIR/tests/ui/sync_impl/lazy_lock_function.rs:6:47: 6:49}`
67 | 6 7 |
78 | check_sync(LazyLock::new(closure_capturing_non_sync_variable)); 7 8 | check_sync(LazyLock::new(closure_capturing_non_sync_variable));
8 | ---------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*const u8` cannot be shared between threads safely 8 | ---------- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*const u8` cannot be shared between threads safely
9 | | 9 | |
10 | required by a bound introduced by this call 10 | required by a bound introduced by this call
@@ -14,7 +14,7 @@ error[E0277]: `*const u8` cannot be shared between threads safely
14note: required because it's used within this closure 14note: required because it's used within this closure
15 --> tests/ui/sync_impl/lazy_lock_function.rs:6:47 15 --> tests/ui/sync_impl/lazy_lock_function.rs:6:47
16 | 16 |
176 | let closure_capturing_non_sync_variable = || unsafe { core::ptr::read(x_ptr) }; 17 6 | let closure_capturing_non_sync_variable = || unsafe { core::ptr::read(x_ptr) };
18 | ^^ 18 | ^^
19 = note: required for `embassy_sync::lazy_lock::LazyLock<u8, {closure@$DIR/tests/ui/sync_impl/lazy_lock_function.rs:6:47: 6:49}>` to implement `Sync` 19 = note: required for `embassy_sync::lazy_lock::LazyLock<u8, {closure@$DIR/tests/ui/sync_impl/lazy_lock_function.rs:6:47: 6:49}>` to implement `Sync`
20note: required by a bound in `check_sync` 20note: required by a bound in `check_sync`