/* * Copyright (c) 2016 Wind River Systems, Inc. * * SPDX-License-Identifier: Apache-2.0 */ /** * @file * @brief Primitive for aborting a thread when an arch-specific one is not * needed.. */ #include #include #include #include #include #include #include #include #include #include #include extern void z_thread_single_abort(struct k_thread *thread); #if !defined(CONFIG_ARCH_HAS_THREAD_ABORT) void z_impl_k_thread_abort(k_tid_t thread) { __ASSERT((thread->base.user_options & K_ESSENTIAL) == 0U, "essential thread aborted"); z_thread_single_abort(thread); z_thread_monitor_exit(thread); if (thread == _current && !arch_is_in_isr()) { /* Direct use of swap: reschedule doesn't have a test * for "is _current dead" and we don't want one for * performance reasons. */ z_swap_unlocked(); } else { z_reschedule_unlocked(); } } #endif