ok, tricky case.
On Fri, May 21, 2021 at 8:57 AM Sebastian Huber <sebastian.hu...@embedded-brains.de> wrote: > > Commit 73ebf9a27ed5cd0fd3e0dc0da98345d7faa610a2 accidentally removed the > direct thread dispatch in a self thread restart. In case of a self > restart (always in task context) the directive shall not return. If > this is not possible due to a bad thread dispatch disable level, then a > fatal error shall occur. > > Update #4412. > --- > cpukit/score/src/threadrestart.c | 16 +++++++++++----- > 1 file changed, 11 insertions(+), 5 deletions(-) > > diff --git a/cpukit/score/src/threadrestart.c > b/cpukit/score/src/threadrestart.c > index e4e123b9f0..79a154e3d3 100644 > --- a/cpukit/score/src/threadrestart.c > +++ b/cpukit/score/src/threadrestart.c > @@ -539,6 +539,7 @@ Status_Control _Thread_Restart( > { > Thread_Life_state previous; > Per_CPU_Control *cpu_self; > + bool is_self_restart; > Thread_Life_state ignored_life_states; > Thread_queue_Context queue_context; > > @@ -550,11 +551,10 @@ Status_Control _Thread_Restart( > } > > cpu_self = _Thread_Dispatch_disable_critical( lock_context ); > + is_self_restart = ( the_thread == _Per_CPU_Get_executing( cpu_self ) && > + !_Per_CPU_Is_ISR_in_progress( cpu_self ) ); > > - if ( > - the_thread == _Per_CPU_Get_executing( cpu_self ) && > - !_Per_CPU_Is_ISR_in_progress( cpu_self ) > - ) { > + if ( is_self_restart ) { > ignored_life_states = THREAD_LIFE_PROTECTED | > THREAD_LIFE_CHANGE_DEFERRED; > } else { > ignored_life_states = 0; > @@ -582,7 +582,13 @@ Status_Control _Thread_Restart( > _Thread_Wait_release( the_thread, &queue_context ); > > _Thread_Priority_update( &queue_context ); > - _Thread_Dispatch_enable( cpu_self ); > + > + if ( is_self_restart ) { > + _Thread_Dispatch_direct_no_return( cpu_self ); > + } else { > + _Thread_Dispatch_enable( cpu_self ); > + } > + > return STATUS_SUCCESSFUL; > } > > -- > 2.26.2 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel