signal/sig_dispatch: Signal action was not performed if TCB_FLAG_SYSCALL is set

For some reason the signal action was never performed if the receiveing
task was within a system call, the pending queue inser was simply missing.

This fixes the issue.
This commit is contained in:
Ville Juven 2023-02-17 13:41:31 +02:00 committed by Xiang Xiao
parent 8e4d461d61
commit 0e44666828
1 changed files with 9 additions and 0 deletions

View File

@ -372,6 +372,15 @@ int nxsig_tcbdispatch(FAR struct tcb_s *stcb, siginfo_t *info)
if (masked == 1) if (masked == 1)
#endif #endif
{ {
#ifdef CONFIG_LIB_SYSCALL
/* If the thread is in syscall, schedule the sigaction here */
if ((stcb->flags & TCB_FLAG_SYSCALL) != 0)
{
nxsig_add_pendingsignal(stcb, info);
}
#endif
/* Check if the task is waiting for this pending signal. If so, then /* Check if the task is waiting for this pending signal. If so, then
* unblock it. This must be performed in a critical section because * unblock it. This must be performed in a critical section because
* signals can be queued from the interrupt level. * signals can be queued from the interrupt level.