@@ -101,7 +101,8 @@ unsafe impl<T: ?Sized + Send + Sync> Sync for RwLock<T> {}
101101#[ stable( feature = "rust1" , since = "1.0.0" ) ]
102102#[ clippy:: has_significant_drop]
103103pub struct RwLockReadGuard < ' a , T : ?Sized + ' a > {
104- lock : & ' a RwLock < T > ,
104+ inner_lock : & ' a sys:: MovableRwLock ,
105+ data : & ' a T ,
105106}
106107
107108#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -510,7 +511,7 @@ impl<T> From<T> for RwLock<T> {
510511
511512impl < ' rwlock , T : ?Sized > RwLockReadGuard < ' rwlock , T > {
512513 unsafe fn new ( lock : & ' rwlock RwLock < T > ) -> LockResult < RwLockReadGuard < ' rwlock , T > > {
513- poison:: map_result ( lock. poison . borrow ( ) , |( ) | RwLockReadGuard { lock } )
514+ poison:: map_result ( lock. poison . borrow ( ) , |( ) | RwLockReadGuard { inner_lock : & lock. inner , data : & * lock . data . get ( ) } )
514515 }
515516}
516517
@@ -553,7 +554,7 @@ impl<T: ?Sized> Deref for RwLockReadGuard<'_, T> {
553554 type Target = T ;
554555
555556 fn deref ( & self ) -> & T {
556- unsafe { & * self . lock . data . get ( ) }
557+ self . data
557558 }
558559}
559560
@@ -577,7 +578,7 @@ impl<T: ?Sized> DerefMut for RwLockWriteGuard<'_, T> {
577578impl < T : ?Sized > Drop for RwLockReadGuard < ' _ , T > {
578579 fn drop ( & mut self ) {
579580 unsafe {
580- self . lock . inner . read_unlock ( ) ;
581+ self . inner_lock . read_unlock ( ) ;
581582 }
582583 }
583584}
0 commit comments