mirror of
https://github.com/apache/nuttx.git
synced 2026-05-28 20:08:15 +08:00
sched/sched/sched_get_stackinfo.c: coverity HIS_metric_violation: RETURN
Consolidate multiple return statements in sched_get_stackinfo() to comply with MISRA HIS coding standards for safety-critical systems. This refactoring maintains functional equivalence while improving code verifiability and reducing cyclomatic complexity for better maintainability. Signed-off-by: hujun5 <hujun5@xiaomi.com>
This commit is contained in:
@@ -60,54 +60,64 @@ int nxsched_get_stackinfo(pid_t pid, FAR struct stackinfo_s *stackinfo)
|
|||||||
{
|
{
|
||||||
FAR struct tcb_s *rtcb = this_task(); /* TCB of running task */
|
FAR struct tcb_s *rtcb = this_task(); /* TCB of running task */
|
||||||
FAR struct tcb_s *qtcb; /* TCB of queried task */
|
FAR struct tcb_s *qtcb; /* TCB of queried task */
|
||||||
|
int ret = OK;
|
||||||
|
|
||||||
DEBUGASSERT(stackinfo != NULL);
|
DEBUGASSERT(stackinfo != NULL);
|
||||||
|
|
||||||
if (rtcb == NULL)
|
if (rtcb != NULL)
|
||||||
{
|
{
|
||||||
return -ENOENT;
|
/* Pid of 0 means that we are querying ourself */
|
||||||
}
|
|
||||||
|
|
||||||
/* Pid of 0 means that we are querying ourself */
|
if (pid == 0)
|
||||||
|
|
||||||
if (pid == 0)
|
|
||||||
{
|
|
||||||
/* We can always query ourself */
|
|
||||||
|
|
||||||
qtcb = rtcb;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Get the task to be queried */
|
|
||||||
|
|
||||||
qtcb = nxsched_get_tcb(pid);
|
|
||||||
if (qtcb == NULL)
|
|
||||||
{
|
{
|
||||||
return -ENOENT;
|
/* We can always query ourself */
|
||||||
|
|
||||||
|
qtcb = rtcb;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
/* A kernel thread can query any other thread. Application threads
|
|
||||||
* can only query application threads in the same task group.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((rtcb->flags & TCB_FLAG_TTYPE_MASK) != TCB_FLAG_TTYPE_KERNEL)
|
|
||||||
{
|
{
|
||||||
/* It is an application thread. It is permitted to query
|
/* Get the task to be queried */
|
||||||
* only threads within the same task group. It is not permitted
|
|
||||||
* to peek into the stacks of either kernel threads or other
|
|
||||||
* applications tasks.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (rtcb->group != qtcb->group)
|
qtcb = nxsched_get_tcb(pid);
|
||||||
|
if (qtcb != NULL)
|
||||||
{
|
{
|
||||||
return -EACCES;
|
/* A kernel thread can query any other thread.
|
||||||
|
* Application threads can only query application
|
||||||
|
* threads in the same task group.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((rtcb->flags & TCB_FLAG_TTYPE_MASK) !=
|
||||||
|
TCB_FLAG_TTYPE_KERNEL)
|
||||||
|
{
|
||||||
|
/* It is an application thread. It is permitted to query
|
||||||
|
* only threads within the same task group. It is not
|
||||||
|
* permitted to peek into the stacks of either kernel
|
||||||
|
* threads or other applications tasks.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (rtcb->group != qtcb->group)
|
||||||
|
{
|
||||||
|
ret = -EACCES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = -ENOENT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
stackinfo->adj_stack_size = qtcb->adj_stack_size;
|
if (ret >= 0)
|
||||||
stackinfo->stack_alloc_ptr = qtcb->stack_alloc_ptr;
|
{
|
||||||
stackinfo->stack_base_ptr = qtcb->stack_base_ptr;
|
stackinfo->adj_stack_size = qtcb->adj_stack_size;
|
||||||
|
stackinfo->stack_alloc_ptr = qtcb->stack_alloc_ptr;
|
||||||
|
stackinfo->stack_base_ptr = qtcb->stack_base_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
return OK;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user