Skip to content

Commit dc49018

Browse files
radfordalexcrichton
authored andcommitted
sync: remove unsafe and add Send+Share to Deref (enabled by autoderef vtables)
1 parent 9a33330 commit dc49018

File tree

2 files changed

+7
-11
lines changed

2 files changed

+7
-11
lines changed

src/libsync/arc.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,10 @@ impl<T: Share + Send> Clone for Arc<T> {
124124
}
125125
}
126126

127-
// FIXME(#13042): this should have T: Send, and use self.inner()
128-
impl<T> Deref<T> for Arc<T> {
127+
impl<T: Send + Share> Deref<T> for Arc<T> {
129128
#[inline]
130129
fn deref<'a>(&'a self) -> &'a T {
131-
let inner = unsafe { &*self.x };
132-
&inner.data
130+
&self.inner().data
133131
}
134132
}
135133

src/libsync/lock.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,10 @@ impl<T: Send> Mutex<T> {
231231
}
232232
}
233233

234-
// FIXME(#13042): these should both have T: Send
235-
impl<'a, T> Deref<T> for MutexGuard<'a, T> {
234+
impl<'a, T: Send> Deref<T> for MutexGuard<'a, T> {
236235
fn deref<'a>(&'a self) -> &'a T { &*self.data }
237236
}
238-
impl<'a, T> DerefMut<T> for MutexGuard<'a, T> {
237+
impl<'a, T: Send> DerefMut<T> for MutexGuard<'a, T> {
239238
fn deref_mut<'a>(&'a mut self) -> &'a mut T { &mut *self.data }
240239
}
241240

@@ -363,14 +362,13 @@ impl<'a, T: Send + Share> RWLockWriteGuard<'a, T> {
363362
}
364363
}
365364

366-
// FIXME(#13042): these should all have T: Send + Share
367-
impl<'a, T> Deref<T> for RWLockReadGuard<'a, T> {
365+
impl<'a, T: Send + Share> Deref<T> for RWLockReadGuard<'a, T> {
368366
fn deref<'a>(&'a self) -> &'a T { self.data }
369367
}
370-
impl<'a, T> Deref<T> for RWLockWriteGuard<'a, T> {
368+
impl<'a, T: Send + Share> Deref<T> for RWLockWriteGuard<'a, T> {
371369
fn deref<'a>(&'a self) -> &'a T { &*self.data }
372370
}
373-
impl<'a, T> DerefMut<T> for RWLockWriteGuard<'a, T> {
371+
impl<'a, T: Send + Share> DerefMut<T> for RWLockWriteGuard<'a, T> {
374372
fn deref_mut<'a>(&'a mut self) -> &'a mut T { &mut *self.data }
375373
}
376374

0 commit comments

Comments
 (0)