diff options
Diffstat (limited to 'src/libsync')
| -rw-r--r-- | src/libsync/arc.rs | 6 | ||||
| -rw-r--r-- | src/libsync/lock.rs | 12 |
2 files changed, 7 insertions, 11 deletions
diff --git a/src/libsync/arc.rs b/src/libsync/arc.rs index ae76357a2be..ecfeade2fb4 100644 --- a/src/libsync/arc.rs +++ b/src/libsync/arc.rs @@ -124,12 +124,10 @@ impl<T: Share + Send> Clone for Arc<T> { } } -// FIXME(#13042): this should have T: Send, and use self.inner() -impl<T> Deref<T> for Arc<T> { +impl<T: Send + Share> Deref<T> for Arc<T> { #[inline] fn deref<'a>(&'a self) -> &'a T { - let inner = unsafe { &*self.x }; - &inner.data + &self.inner().data } } diff --git a/src/libsync/lock.rs b/src/libsync/lock.rs index 67b725f040b..b83bdf9df29 100644 --- a/src/libsync/lock.rs +++ b/src/libsync/lock.rs @@ -231,11 +231,10 @@ impl<T: Send> Mutex<T> { } } -// FIXME(#13042): these should both have T: Send -impl<'a, T> Deref<T> for MutexGuard<'a, T> { +impl<'a, T: Send> Deref<T> for MutexGuard<'a, T> { fn deref<'a>(&'a self) -> &'a T { &*self.data } } -impl<'a, T> DerefMut<T> for MutexGuard<'a, T> { +impl<'a, T: Send> DerefMut<T> for MutexGuard<'a, T> { fn deref_mut<'a>(&'a mut self) -> &'a mut T { &mut *self.data } } @@ -363,14 +362,13 @@ impl<'a, T: Send + Share> RWLockWriteGuard<'a, T> { } } -// FIXME(#13042): these should all have T: Send + Share -impl<'a, T> Deref<T> for RWLockReadGuard<'a, T> { +impl<'a, T: Send + Share> Deref<T> for RWLockReadGuard<'a, T> { fn deref<'a>(&'a self) -> &'a T { self.data } } -impl<'a, T> Deref<T> for RWLockWriteGuard<'a, T> { +impl<'a, T: Send + Share> Deref<T> for RWLockWriteGuard<'a, T> { fn deref<'a>(&'a self) -> &'a T { &*self.data } } -impl<'a, T> DerefMut<T> for RWLockWriteGuard<'a, T> { +impl<'a, T: Send + Share> DerefMut<T> for RWLockWriteGuard<'a, T> { fn deref_mut<'a>(&'a mut self) -> &'a mut T { &mut *self.data } } |
