@@ -15,10 +15,12 @@ unsafe impl Sync for Condvar {}
1515pub type MovableCondvar = Condvar ;
1616
1717impl Condvar {
18+ #[ inline]
1819 pub const fn new ( ) -> Condvar {
1920 Condvar { waiters : SpinMutex :: new ( waiter_queue:: WaiterQueue :: new ( ) ) }
2021 }
2122
23+ #[ inline]
2224 pub unsafe fn init ( & mut self ) { }
2325
2426 pub unsafe fn notify_one ( & self ) {
@@ -206,14 +208,16 @@ mod waiter_queue {
206208
207209 if let Some ( mut insert_after) = insert_after {
208210 // Insert `waiter` after `insert_after`
209- let insert_before = insert_after. as_ref ( ) . prev ;
211+ let insert_before = insert_after. as_ref ( ) . next ;
210212
211213 waiter. prev = Some ( insert_after) ;
212214 insert_after. as_mut ( ) . next = Some ( waiter_ptr) ;
213215
214216 waiter. next = insert_before;
215217 if let Some ( mut insert_before) = insert_before {
216218 insert_before. as_mut ( ) . prev = Some ( waiter_ptr) ;
219+ } else {
220+ head. last = waiter_ptr;
217221 }
218222 } else {
219223 // Insert `waiter` to the front
@@ -240,11 +244,11 @@ mod waiter_queue {
240244 match ( waiter. prev , waiter. next ) {
241245 ( Some ( mut prev) , Some ( mut next) ) => {
242246 prev. as_mut ( ) . next = Some ( next) ;
243- next. as_mut ( ) . next = Some ( prev) ;
247+ next. as_mut ( ) . prev = Some ( prev) ;
244248 }
245249 ( None , Some ( mut next) ) => {
246250 head. first = next;
247- next. as_mut ( ) . next = None ;
251+ next. as_mut ( ) . prev = None ;
248252 }
249253 ( Some ( mut prev) , None ) => {
250254 prev. as_mut ( ) . next = None ;
@@ -271,6 +275,7 @@ mod waiter_queue {
271275 unsafe { waiter. as_ref ( ) . task != 0 }
272276 }
273277
278+ #[ inline]
274279 pub fn pop_front ( & mut self ) -> Option < abi:: ID > {
275280 unsafe {
276281 let head = self . head . as_mut ( ) ?;
0 commit comments