sched/signal/sig_dispatch.c: Simplify the nxsig_dispatch

The nxsig_dispatch should just deliver the signal to either a
thread by pid (tid) or to the process (group) by pid.

Simplify the code so that the intent is more obvious.

Signed-off-by: Jukka Laitinen <jukka.laitinen@tii.ae>
This commit is contained in:
Jukka Laitinen 2025-08-29 18:55:28 +03:00 committed by Xiang Xiao
parent a4c42e54f7
commit 9413b6f331

View file

@ -725,70 +725,29 @@ int nxsig_tcbdispatch(FAR struct tcb_s *stcb, siginfo_t *info,
int nxsig_dispatch(pid_t pid, FAR siginfo_t *info, bool thread)
{
#ifdef HAVE_GROUP_MEMBERS
FAR struct tcb_s *stcb;
FAR struct task_group_s *group;
/* Get the TCB associated with the pid */
stcb = nxsched_get_tcb(pid);
if (stcb != NULL)
if (!thread)
{
/* The task/thread associated with this PID is still active. Get its
* task group.
/* Find the group by process PID and call group signal() to send the
* signal to the correct group member.
*/
group = stcb->group;
}
else
{
/* The task/thread associated with this PID has exited. In the normal
* usage model, the PID should correspond to the PID of the task that
* created the task group. Try looking it up.
*/
group = task_getgroup(pid);
}
/* Did we locate the group? */
FAR struct task_group_s *group = task_getgroup(pid);
if (group != NULL)
{
if (thread)
{
/* Before the notification, we should validate the tid. If the
* signal is to be delivered to a thread which has exited, it is
* just dropped.
*/
if (stcb != NULL)
{
return nxsig_tcbdispatch(stcb, info, false);
}
}
else
{
/* Yes.. call group_signal() to send the signal to the correct
* group member.
*/
return group_signal(group, info);
}
}
return -ESRCH;
#else
FAR struct tcb_s *stcb;
/* Get the TCB associated with the pid */
stcb = nxsched_get_tcb(pid);
if (stcb == NULL)
else
#endif
{
return -ESRCH;
/* Get the TCB associated with the thread TID */
FAR struct tcb_s *stcb = nxsched_get_tcb(pid);
if (stcb != NULL)
{
return nxsig_tcbdispatch(stcb, info, false);
}
}
return nxsig_tcbdispatch(stcb, info, false);
#endif
return -ESRCH;
}