sync: remove unsafe and add Send+Share to Deref (enabled by autoderef vtables)

This commit is contained in:
Jim Radford 2014-04-07 17:55:14 -07:00 committed by Alex Crichton
parent 9a33330caa
commit dc49018679
2 changed files with 7 additions and 11 deletions

View file

@ -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
}
}

View file

@ -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 }
}