@@ -15,10 +15,12 @@ unsafe impl Sync for Condvar {}
15
15
pub type MovableCondvar = Condvar ;
16
16
17
17
impl Condvar {
18
+ #[ inline]
18
19
pub const fn new ( ) -> Condvar {
19
20
Condvar { waiters : SpinMutex :: new ( waiter_queue:: WaiterQueue :: new ( ) ) }
20
21
}
21
22
23
+ #[ inline]
22
24
pub unsafe fn init ( & mut self ) { }
23
25
24
26
pub unsafe fn notify_one ( & self ) {
@@ -206,14 +208,16 @@ mod waiter_queue {
206
208
207
209
if let Some ( mut insert_after) = insert_after {
208
210
// Insert `waiter` after `insert_after`
209
- let insert_before = insert_after. as_ref ( ) . prev ;
211
+ let insert_before = insert_after. as_ref ( ) . next ;
210
212
211
213
waiter. prev = Some ( insert_after) ;
212
214
insert_after. as_mut ( ) . next = Some ( waiter_ptr) ;
213
215
214
216
waiter. next = insert_before;
215
217
if let Some ( mut insert_before) = insert_before {
216
218
insert_before. as_mut ( ) . prev = Some ( waiter_ptr) ;
219
+ } else {
220
+ head. last = waiter_ptr;
217
221
}
218
222
} else {
219
223
// Insert `waiter` to the front
@@ -240,11 +244,11 @@ mod waiter_queue {
240
244
match ( waiter. prev , waiter. next ) {
241
245
( Some ( mut prev) , Some ( mut next) ) => {
242
246
prev. as_mut ( ) . next = Some ( next) ;
243
- next. as_mut ( ) . next = Some ( prev) ;
247
+ next. as_mut ( ) . prev = Some ( prev) ;
244
248
}
245
249
( None , Some ( mut next) ) => {
246
250
head. first = next;
247
- next. as_mut ( ) . next = None ;
251
+ next. as_mut ( ) . prev = None ;
248
252
}
249
253
( Some ( mut prev) , None ) => {
250
254
prev. as_mut ( ) . next = None ;
@@ -271,6 +275,7 @@ mod waiter_queue {
271
275
unsafe { waiter. as_ref ( ) . task != 0 }
272
276
}
273
277
278
+ #[ inline]
274
279
pub fn pop_front ( & mut self ) -> Option < abi:: ID > {
275
280
unsafe {
276
281
let head = self . head . as_mut ( ) ?;
0 commit comments