@@ -43,30 +43,30 @@ impl Condvar {
43
43
}
44
44
45
45
thread_local ! {
46
- /// We track the set of locks currently held by a reference to their `MutexMetadata `
47
- static LOCKS_HELD : RefCell <HashSet <Arc <MutexMetadata >>> = RefCell :: new( HashSet :: new( ) ) ;
46
+ /// We track the set of locks currently held by a reference to their `LockMetadata `
47
+ static LOCKS_HELD : RefCell <HashSet <Arc <LockMetadata >>> = RefCell :: new( HashSet :: new( ) ) ;
48
48
}
49
49
static LOCK_IDX : AtomicUsize = AtomicUsize :: new ( 0 ) ;
50
50
51
51
/// Metadata about a single lock, by id, the set of things locked-before it, and the backtrace of
52
52
/// when the Mutex itself was constructed.
53
- struct MutexMetadata {
53
+ struct LockMetadata {
54
54
lock_idx : u64 ,
55
- locked_before : StdMutex < HashSet < Arc < MutexMetadata > > > ,
55
+ locked_before : StdMutex < HashSet < Arc < LockMetadata > > > ,
56
56
#[ cfg( feature = "backtrace" ) ]
57
57
lock_construction_bt : Backtrace ,
58
58
}
59
- impl PartialEq for MutexMetadata {
60
- fn eq ( & self , o : & MutexMetadata ) -> bool { self . lock_idx == o. lock_idx }
59
+ impl PartialEq for LockMetadata {
60
+ fn eq ( & self , o : & LockMetadata ) -> bool { self . lock_idx == o. lock_idx }
61
61
}
62
- impl Eq for MutexMetadata { }
63
- impl std:: hash:: Hash for MutexMetadata {
62
+ impl Eq for LockMetadata { }
63
+ impl std:: hash:: Hash for LockMetadata {
64
64
fn hash < H : std:: hash:: Hasher > ( & self , hasher : & mut H ) { hasher. write_u64 ( self . lock_idx ) ; }
65
65
}
66
66
67
- impl MutexMetadata {
68
- fn new ( ) -> MutexMetadata {
69
- MutexMetadata {
67
+ impl LockMetadata {
68
+ fn new ( ) -> LockMetadata {
69
+ LockMetadata {
70
70
locked_before : StdMutex :: new ( HashSet :: new ( ) ) ,
71
71
lock_idx : LOCK_IDX . fetch_add ( 1 , Ordering :: Relaxed ) as u64 ,
72
72
#[ cfg( feature = "backtrace" ) ]
@@ -75,7 +75,7 @@ impl MutexMetadata {
75
75
}
76
76
77
77
// Returns whether we were a recursive lock (only relevant for read)
78
- fn _pre_lock ( this : & Arc < MutexMetadata > , read : bool ) -> bool {
78
+ fn _pre_lock ( this : & Arc < LockMetadata > , read : bool ) -> bool {
79
79
let mut inserted = false ;
80
80
LOCKS_HELD . with ( |held| {
81
81
// For each lock which is currently locked, check that no lock's locked-before
@@ -108,10 +108,10 @@ impl MutexMetadata {
108
108
inserted
109
109
}
110
110
111
- fn pre_lock ( this : & Arc < MutexMetadata > ) { Self :: _pre_lock ( this, false ) ; }
112
- fn pre_read_lock ( this : & Arc < MutexMetadata > ) -> bool { Self :: _pre_lock ( this, true ) }
111
+ fn pre_lock ( this : & Arc < LockMetadata > ) { Self :: _pre_lock ( this, false ) ; }
112
+ fn pre_read_lock ( this : & Arc < LockMetadata > ) -> bool { Self :: _pre_lock ( this, true ) }
113
113
114
- fn try_locked ( this : & Arc < MutexMetadata > ) {
114
+ fn try_locked ( this : & Arc < LockMetadata > ) {
115
115
LOCKS_HELD . with ( |held| {
116
116
// Since a try-lock will simply fail if the lock is held already, we do not
117
117
// consider try-locks to ever generate lockorder inversions. However, if a try-lock
@@ -126,7 +126,7 @@ impl MutexMetadata {
126
126
127
127
pub struct Mutex < T : Sized > {
128
128
inner : StdMutex < T > ,
129
- deps : Arc < MutexMetadata > ,
129
+ deps : Arc < LockMetadata > ,
130
130
}
131
131
132
132
#[ must_use = "if unused the Mutex will immediately unlock" ]
@@ -170,26 +170,26 @@ impl<T: Sized> DerefMut for MutexGuard<'_, T> {
170
170
171
171
impl < T > Mutex < T > {
172
172
pub fn new ( inner : T ) -> Mutex < T > {
173
- Mutex { inner : StdMutex :: new ( inner) , deps : Arc :: new ( MutexMetadata :: new ( ) ) }
173
+ Mutex { inner : StdMutex :: new ( inner) , deps : Arc :: new ( LockMetadata :: new ( ) ) }
174
174
}
175
175
176
176
pub fn lock < ' a > ( & ' a self ) -> LockResult < MutexGuard < ' a , T > > {
177
- MutexMetadata :: pre_lock ( & self . deps ) ;
177
+ LockMetadata :: pre_lock ( & self . deps ) ;
178
178
self . inner . lock ( ) . map ( |lock| MutexGuard { mutex : self , lock } ) . map_err ( |_| ( ) )
179
179
}
180
180
181
181
pub fn try_lock < ' a > ( & ' a self ) -> LockResult < MutexGuard < ' a , T > > {
182
182
let res = self . inner . try_lock ( ) . map ( |lock| MutexGuard { mutex : self , lock } ) . map_err ( |_| ( ) ) ;
183
183
if res. is_ok ( ) {
184
- MutexMetadata :: try_locked ( & self . deps ) ;
184
+ LockMetadata :: try_locked ( & self . deps ) ;
185
185
}
186
186
res
187
187
}
188
188
}
189
189
190
190
pub struct RwLock < T : Sized > {
191
191
inner : StdRwLock < T > ,
192
- deps : Arc < MutexMetadata > ,
192
+ deps : Arc < LockMetadata > ,
193
193
}
194
194
195
195
pub struct RwLockReadGuard < ' a , T : Sized + ' a > {
@@ -249,23 +249,23 @@ impl<T: Sized> DerefMut for RwLockWriteGuard<'_, T> {
249
249
250
250
impl < T > RwLock < T > {
251
251
pub fn new ( inner : T ) -> RwLock < T > {
252
- RwLock { inner : StdRwLock :: new ( inner) , deps : Arc :: new ( MutexMetadata :: new ( ) ) }
252
+ RwLock { inner : StdRwLock :: new ( inner) , deps : Arc :: new ( LockMetadata :: new ( ) ) }
253
253
}
254
254
255
255
pub fn read < ' a > ( & ' a self ) -> LockResult < RwLockReadGuard < ' a , T > > {
256
- let first_lock = MutexMetadata :: pre_read_lock ( & self . deps ) ;
256
+ let first_lock = LockMetadata :: pre_read_lock ( & self . deps ) ;
257
257
self . inner . read ( ) . map ( |guard| RwLockReadGuard { lock : self , guard, first_lock } ) . map_err ( |_| ( ) )
258
258
}
259
259
260
260
pub fn write < ' a > ( & ' a self ) -> LockResult < RwLockWriteGuard < ' a , T > > {
261
- MutexMetadata :: pre_lock ( & self . deps ) ;
261
+ LockMetadata :: pre_lock ( & self . deps ) ;
262
262
self . inner . write ( ) . map ( |guard| RwLockWriteGuard { lock : self , guard } ) . map_err ( |_| ( ) )
263
263
}
264
264
265
265
pub fn try_write < ' a > ( & ' a self ) -> LockResult < RwLockWriteGuard < ' a , T > > {
266
266
let res = self . inner . try_write ( ) . map ( |guard| RwLockWriteGuard { lock : self , guard } ) . map_err ( |_| ( ) ) ;
267
267
if res. is_ok ( ) {
268
- MutexMetadata :: try_locked ( & self . deps ) ;
268
+ LockMetadata :: try_locked ( & self . deps ) ;
269
269
}
270
270
res
271
271
}
0 commit comments