Browse Source
Under SMP, when a thread is marked aborting, this thread may still be running on another CPU. However, if there is only one thread available to run, this thread may be selected to run again due to next_up() not checking for the aborting state. Moreover, when there is no IPI to signal to others k_thread_abort() being called, the k_thread_abort() target thread is marked dead after a new thread is selected to run. This causes the original thread calling k_thread_abort() to mistaken that target thread is no longer running and returns. Note that, with working IPI, z_sched_ipi() is called as an ISR to mark the target thread dead. A new thread is then selected to run, so that the target thread would not be selected due to it being dead. This moves the code to mark thread dead into next_up(), where the next best thread is selected, and the current thread being swapped out. z_sched_ipi() now becomes an empty function, and calls to it are removed. Signed-off-by: Daniel Leung <daniel.leung@intel.com>pull/21403/head
1 changed files with 13 additions and 30 deletions
Loading…
Reference in new issue