@@ -101,7 +101,8 @@ unsafe impl<T: ?Sized + Send + Sync> Sync for RwLock<T> {}
101
101
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
102
102
#[ clippy:: has_significant_drop]
103
103
pub struct RwLockReadGuard < ' a , T : ?Sized + ' a > {
104
- lock : & ' a RwLock < T > ,
104
+ inner_lock : & ' a sys:: MovableRwLock ,
105
+ data : & ' a T ,
105
106
}
106
107
107
108
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -510,7 +511,7 @@ impl<T> From<T> for RwLock<T> {
510
511
511
512
impl < ' rwlock , T : ?Sized > RwLockReadGuard < ' rwlock , T > {
512
513
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 ( ) } )
514
515
}
515
516
}
516
517
@@ -553,7 +554,7 @@ impl<T: ?Sized> Deref for RwLockReadGuard<'_, T> {
553
554
type Target = T ;
554
555
555
556
fn deref ( & self ) -> & T {
556
- unsafe { & * self . lock . data . get ( ) }
557
+ self . data
557
558
}
558
559
}
559
560
@@ -577,7 +578,7 @@ impl<T: ?Sized> DerefMut for RwLockWriteGuard<'_, T> {
577
578
impl < T : ?Sized > Drop for RwLockReadGuard < ' _ , T > {
578
579
fn drop ( & mut self ) {
579
580
unsafe {
580
- self . lock . inner . read_unlock ( ) ;
581
+ self . inner_lock . read_unlock ( ) ;
581
582
}
582
583
}
583
584
}
0 commit comments