about summary refs log tree commit diff
path: root/src/libsync
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsync')
-rw-r--r--src/libsync/arc.rs6
-rw-r--r--src/libsync/lock.rs12
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 }
 }