From ef99151e8e2453011bdb8a2d05b8b67da6ea2ed8 Mon Sep 17 00:00:00 2001 From: Ville Juven Date: Fri, 17 Feb 2023 13:41:31 +0200 Subject: [PATCH] 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. --- sched/signal/sig_dispatch.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sched/signal/sig_dispatch.c b/sched/signal/sig_dispatch.c index 77d0c5ef7181c..9b926667a67dd 100644 --- a/sched/signal/sig_dispatch.c +++ b/sched/signal/sig_dispatch.c @@ -372,6 +372,15 @@ int nxsig_tcbdispatch(FAR struct tcb_s *stcb, siginfo_t *info) if (masked == 1) #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 * unblock it. This must be performed in a critical section because * signals can be queued from the interrupt level.