diff options
| author | maor malka <[email protected]> | 2025-09-23 21:44:21 -0400 |
|---|---|---|
| committer | maor malka <[email protected]> | 2025-09-23 21:44:21 -0400 |
| commit | f701fc411726c57a86c0b50c649cb8bf236e7c1a (patch) | |
| tree | 61a48ac36528e7c7ae9cdbe1c22c985e8bde5a2b /embassy-sync | |
| parent | acc3c4b98c5238950640409d6a8ab6029edda3c9 (diff) | |
| parent | 56019ba197443e16b4f0b3a0fe3ff85985f6e45c (diff) | |
Merge remote-tracking branch 'upstream/main'
Diffstat (limited to 'embassy-sync')
| -rw-r--r-- | embassy-sync/CHANGELOG.md | 1 | ||||
| -rw-r--r-- | embassy-sync/Cargo.toml | 4 | ||||
| -rw-r--r-- | embassy-sync/src/blocking_mutex/mod.rs | 4 | ||||
| -rw-r--r-- | embassy-sync/src/blocking_mutex/raw.rs | 4 | ||||
| -rw-r--r-- | embassy-sync/src/mutex.rs | 4 | ||||
| -rw-r--r-- | embassy-sync/src/rwlock.rs | 2 | ||||
| -rw-r--r-- | embassy-sync/tests/ui/sync_impl/lazy_lock_function.stderr | 8 |
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] |
| 18 | build = [ | 18 | build = [ |
| 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/ | |||
| 25 | target = "thumbv7em-none-eabi" | 27 | target = "thumbv7em-none-eabi" |
| 26 | 28 | ||
| 27 | [features] | 29 | [features] |
| 30 | defmt = ["dep:defmt"] | ||
| 31 | log = ["dep:log"] | ||
| 28 | std = [] | 32 | std = [] |
| 29 | turbowakers = [] | 33 | turbowakers = [] |
| 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"))] |
| 139 | pub use thread_mode_mutex::*; | 139 | pub use thread_mode_mutex::*; |
| 140 | #[cfg(any(cortex_m, feature = "std"))] | 140 | #[cfg(any(cortex_m, doc, feature = "std"))] |
| 141 | mod thread_mode_mutex { | 141 | mod 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"))] |
| 93 | mod thread_mode { | 93 | mod 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"))] |
| 151 | pub use thread_mode::*; | 151 | pub 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 | |||
| 42 | pub struct RwLock<M, T> | 40 | pub struct RwLock<M, T> |
| 43 | where | 41 | where |
| 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 @@ | |||
| 1 | error[E0277]: `*const u8` cannot be shared between threads safely | 1 | error[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 | | |
| 4 | 6 | 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}` |
| 6 | 7 | | 6 | 7 | |
| 7 | 8 | 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 | |||
| 14 | note: required because it's used within this closure | 14 | note: 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 | | |
| 17 | 6 | 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` |
| 20 | note: required by a bound in `check_sync` | 20 | note: required by a bound in `check_sync` |
