@@ -288,7 +288,7 @@ impl ums::Scheduler for SchedState {
288
288
/// [`ums::ThreadGroupLockGuard::preempt`] or [`ums::yield_now`].
289
289
#[ must_use]
290
290
fn check_preemption_by_interrupt (
291
- state : & ' static State ,
291
+ thread_group : & ' static ums :: ThreadGroup < SchedState > ,
292
292
lock : & mut ums:: ThreadGroupLockGuard < SchedState > ,
293
293
) -> bool {
294
294
let mut activated_any = false ;
@@ -344,7 +344,7 @@ fn check_preemption_by_interrupt(
344
344
// Safety: The port can call an interrupt handler
345
345
unsafe { start ( ) }
346
346
347
- let mut lock = state . thread_group . get ( ) . unwrap ( ) . lock ( ) ;
347
+ let mut lock = thread_group. lock ( ) ;
348
348
349
349
// Make this interrupt handler inactive
350
350
let ( _, popped_thread_id) = lock. scheduler ( ) . active_int_handlers . pop ( ) . unwrap ( ) ;
@@ -358,7 +358,7 @@ fn check_preemption_by_interrupt(
358
358
// Make sure this thread will run to completion
359
359
lock. scheduler ( ) . zombies . push ( thread_id) ;
360
360
361
- let _ = check_preemption_by_interrupt ( state , & mut lock) ;
361
+ let _ = check_preemption_by_interrupt ( thread_group , & mut lock) ;
362
362
} ) ;
363
363
364
364
log:: trace!(
@@ -427,7 +427,10 @@ impl State {
427
427
lock. scheduler ( ) . cpu_lock = false ;
428
428
429
429
// Start scheduling
430
- assert ! ( check_preemption_by_interrupt( self , & mut lock) ) ;
430
+ assert ! ( check_preemption_by_interrupt(
431
+ self . thread_group. get( ) . unwrap( ) ,
432
+ & mut lock
433
+ ) ) ;
431
434
lock. preempt ( ) ;
432
435
drop ( lock) ;
433
436
@@ -548,7 +551,7 @@ impl State {
548
551
assert ! ( lock. scheduler( ) . cpu_lock) ;
549
552
lock. scheduler ( ) . cpu_lock = false ;
550
553
551
- if check_preemption_by_interrupt ( self , & mut lock) {
554
+ if check_preemption_by_interrupt ( self . thread_group . get ( ) . unwrap ( ) , & mut lock) {
552
555
drop ( lock) ;
553
556
ums:: yield_now ( ) ;
554
557
}
@@ -599,7 +602,7 @@ impl State {
599
602
. update_line ( num, |line| line. priority = priority)
600
603
. map_err ( |BadIntLineError | SetInterruptLinePriorityError :: BadParam ) ?;
601
604
602
- if check_preemption_by_interrupt ( self , & mut lock) {
605
+ if check_preemption_by_interrupt ( self . thread_group . get ( ) . unwrap ( ) , & mut lock) {
603
606
drop ( lock) ;
604
607
ums:: yield_now ( ) ;
605
608
}
@@ -618,7 +621,7 @@ impl State {
618
621
. update_line ( num, |line| line. enable = true )
619
622
. map_err ( |BadIntLineError | EnableInterruptLineError :: BadParam ) ?;
620
623
621
- if check_preemption_by_interrupt ( self , & mut lock) {
624
+ if check_preemption_by_interrupt ( self . thread_group . get ( ) . unwrap ( ) , & mut lock) {
622
625
drop ( lock) ;
623
626
ums:: yield_now ( ) ;
624
627
}
@@ -649,7 +652,7 @@ impl State {
649
652
. update_line ( num, |line| line. pended = true )
650
653
. map_err ( |BadIntLineError | PendInterruptLineError :: BadParam ) ?;
651
654
652
- if check_preemption_by_interrupt ( self , & mut lock) {
655
+ if check_preemption_by_interrupt ( self . thread_group . get ( ) . unwrap ( ) , & mut lock) {
653
656
drop ( lock) ;
654
657
ums:: yield_now ( ) ;
655
658
}
0 commit comments