diff options
| author | Jim Radford <radford@blackbean.org> | 2014-04-07 17:55:14 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2014-04-08 00:03:11 -0700 |
| commit | dc49018679e75e8641c8a8bb295075ec5f247d99 (patch) | |
| tree | 8d403adf18e9d8247bca3e082a46d695cf3ed640 /src/libsync | |
| parent | 9a33330caaaedb9eef447ae862e9b87e3aa9880f (diff) | |
| download | rust-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.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 } } |
