kernel: fix oops policy for k_thread_abort()
Don't generate a Z_OOPS() if k_thread_abort() is called on a thread that isn't running. Just return to the caller instead, much like how k_thread_join() functions. Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
81d96d6e9b
commit
a4c9190649
2 changed files with 14 additions and 12 deletions
|
@ -1472,7 +1472,7 @@ static bool thread_obj_validate(struct k_thread *thread)
|
||||||
CODE_UNREACHABLE;
|
CODE_UNREACHABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int z_vrfy_k_thread_join(struct k_thread *thread, s32_t timeout)
|
static inline int z_vrfy_k_thread_join(struct k_thread *thread, s32_t timeout)
|
||||||
{
|
{
|
||||||
if (thread_obj_validate(thread)) {
|
if (thread_obj_validate(thread)) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1481,4 +1481,17 @@ int z_vrfy_k_thread_join(struct k_thread *thread, s32_t timeout)
|
||||||
return z_impl_k_thread_join(thread, timeout);
|
return z_impl_k_thread_join(thread, timeout);
|
||||||
}
|
}
|
||||||
#include <syscalls/k_thread_join_mrsh.c>
|
#include <syscalls/k_thread_join_mrsh.c>
|
||||||
|
|
||||||
|
static inline void z_vrfy_k_thread_abort(k_tid_t thread)
|
||||||
|
{
|
||||||
|
if (thread_obj_validate(thread)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Z_OOPS(Z_SYSCALL_VERIFY_MSG(!(thread->base.user_options & K_ESSENTIAL),
|
||||||
|
"aborting essential thread %p", thread));
|
||||||
|
|
||||||
|
z_impl_k_thread_abort((struct k_thread *)thread);
|
||||||
|
}
|
||||||
|
#include <syscalls/k_thread_abort_mrsh.c>
|
||||||
#endif /* CONFIG_USERSPACE */
|
#endif /* CONFIG_USERSPACE */
|
||||||
|
|
|
@ -843,17 +843,6 @@ static inline int z_vrfy_k_float_disable(struct k_thread *thread)
|
||||||
return z_impl_k_float_disable(thread);
|
return z_impl_k_float_disable(thread);
|
||||||
}
|
}
|
||||||
#include <syscalls/k_float_disable_mrsh.c>
|
#include <syscalls/k_float_disable_mrsh.c>
|
||||||
|
|
||||||
static inline void z_vrfy_k_thread_abort(k_tid_t thread)
|
|
||||||
{
|
|
||||||
Z_OOPS(Z_SYSCALL_OBJ(thread, K_OBJ_THREAD));
|
|
||||||
Z_OOPS(Z_SYSCALL_VERIFY_MSG(!(thread->base.user_options & K_ESSENTIAL),
|
|
||||||
"aborting essential thread %p", thread));
|
|
||||||
|
|
||||||
z_impl_k_thread_abort((struct k_thread *)thread);
|
|
||||||
}
|
|
||||||
#include <syscalls/k_thread_abort_mrsh.c>
|
|
||||||
|
|
||||||
#endif /* CONFIG_USERSPACE */
|
#endif /* CONFIG_USERSPACE */
|
||||||
|
|
||||||
#ifdef CONFIG_IRQ_OFFLOAD
|
#ifdef CONFIG_IRQ_OFFLOAD
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue