about summary refs log tree commit diff
path: root/src/libsync
diff options
context:
space:
mode:
authorJim Radford <radford@blackbean.org>2014-04-07 17:55:14 -0700
committerAlex Crichton <alex@alexcrichton.com>2014-04-08 00:03:11 -0700
commitdc49018679e75e8641c8a8bb295075ec5f247d99 (patch)
tree8d403adf18e9d8247bca3e082a46d695cf3ed640 /src/libsync
parent9a33330caaaedb9eef447ae862e9b87e3aa9880f (diff)
downloadrust-dc49018679e75e8641c8a8bb295075ec5f247d99.tar.gz
rust-dc49018679e75e8641c8a8bb295075ec5f247d99.zip
sync: remove unsafe and add Send+Share to Deref (enabled by autoderef vtables)
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 }
 }