kernel: Add new k_thread_abort()/k_thread_join()
Add a newer, much smaller and simpler implementation of abort and join. No need to involve the idle thread. No need for a special code path for self-abort. Joining a thread and waiting for an aborting one to terminate elsewhere share an implementation. All work in both calls happens under a single locked path with no unexpected synchronization points. This fixes a bug with the current implementation where the action of z_sched_single_abort() was nonatomic, releasing the lock internally at a point where the thread to be aborted could self-abort and confuse the state such that it failed to abort at all. Note that the arm32 and native_posix architectures, which have their own thread abort implementations, now see a much simplified "z_thread_abort()" internal API. Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
This commit is contained in:
parent
c0c8cb0e97
commit
6fb6d3cfbe
8 changed files with 136 additions and 19 deletions
|
@ -204,6 +204,9 @@ struct k_thread {
|
|||
/** static thread init data */
|
||||
void *init_data;
|
||||
|
||||
/** threads waiting in k_thread_join() */
|
||||
_wait_q_t join_queue;
|
||||
|
||||
#if defined(CONFIG_POLL)
|
||||
struct z_poller poller;
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue