diff options
| author | Robert Zieba <[email protected]> | 2025-09-11 14:40:29 -0700 |
|---|---|---|
| committer | Robert Zieba <[email protected]> | 2025-09-12 09:16:32 -0700 |
| commit | 78d5d3f2dde14fcbf4879de19076eb89d9b9ef8b (patch) | |
| tree | 8d27ae1d62076f753928f801ff8ae42e5119852e | |
| parent | 6cc75315652a1029f032f44b5ccd5d1398da05dd (diff) | |
Remove `Sized` bound from `MutexGuard::map`
Since `MutexGuard` has `T: ?Sized`, `U` does not need to be restricted
to `Sized` types. This now allows using `map` to cast from
`MutexGuard<'_, M, ImplsTrait>` to `MutexGuard<'_, M, dyn Trait>`.
| -rw-r--r-- | embassy-sync/CHANGELOG.md | 1 | ||||
| -rw-r--r-- | embassy-sync/src/mutex.rs | 4 |
2 files changed, 3 insertions, 2 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/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 |
