This is an automated email from the ASF dual-hosted git repository.

jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 3f529b48827dc81f832d19ed6a430e467f7d7f7e
Author: Ville Juven <[email protected]>
AuthorDate: Wed Mar 8 09:04:33 2023 +0200

    Revert "signal/sig_dispatch: Fix case where signal action is sent twice"
    
    This reverts commit be0cb4cbe3d50ea8d575766876a5f4194f1da5fe.
---
 sched/signal/sig_dispatch.c | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/sched/signal/sig_dispatch.c b/sched/signal/sig_dispatch.c
index ce2842d513..9b926667a6 100644
--- a/sched/signal/sig_dispatch.c
+++ b/sched/signal/sig_dispatch.c
@@ -372,9 +372,14 @@ int nxsig_tcbdispatch(FAR struct tcb_s *stcb, siginfo_t 
*info)
   if (masked == 1)
 #endif
     {
-      /* Add signal to pending queue regardless. */
+#ifdef CONFIG_LIB_SYSCALL
+      /* If the thread is in syscall, schedule the sigaction here */
 
-      nxsig_add_pendingsignal(stcb, info);
+      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
@@ -406,9 +411,19 @@ int nxsig_tcbdispatch(FAR struct tcb_s *stcb, siginfo_t 
*info)
             {
               up_switch_context(stcb, rtcb);
             }
+
+          leave_critical_section(flags);
         }
 
-      leave_critical_section(flags);
+      /* Its not one we are waiting for... Add it to the list of pending
+       * signals.
+       */
+
+      else
+        {
+          leave_critical_section(flags);
+          nxsig_add_pendingsignal(stcb, info);
+        }
     }
 
   /************************* UNMASKED SIGNAL ACTIONS ************************/

Reply via email to