patacongo commented on code in PR #9923:
URL: https://github.com/apache/nuttx/pull/9923#discussion_r1277568554


##########
sched/signal/sig_procmask.c:
##########
@@ -187,8 +187,27 @@ int nxsig_procmask(int how, FAR const sigset_t *set, FAR 
sigset_t *oset)
 
 int sigprocmask(int how, FAR const sigset_t *set, FAR sigset_t *oset)
 {
+  sigset_t nset;
   int ret;
 
+  /* SIGKILL and SIGSTOP should not be added to signal mask */
+
+  if (set != NULL)
+    {
+      nset = *set;
+      if (nxsig_ismember(&nset, SIGKILL))
+        {
+          nxsig_delset(&nset, SIGKILL);
+        }
+
+      if (nxsig_ismember(&nset, SIGSTOP))
+        {
+          nxsig_delset(&nset, SIGSTOP);
+        }
+
+      set = &nset;
+    }
+
   /* Let nxsig_procmask do all of the work */
 
   ret = nxsig_procmask(how, set, oset);

Review Comment:
   Note that there are two different instances of sigprocmask:  One common 
sigprocmask in the task group structure, and one in each TCB.  The latter are 
used by pthread_kill(), pthread_sigprocmask(), etc.
   
   [Update:  At least that is what I thought when I wrote that.  But, in 
reality, there is only the sigprocmask in the TCB???]
   
   Shouldn't the logic that removes SIGKILL and SIGSTOP also be in 
pthread_sigprocmask()?  The effect of sending SIGKILL (or SIGSTOP) via 
kill(SIGKILL, pid) and pthread_kill(thread, SIGKILL) must be identical.  
SIGKILL and SIGSTOP cannot be masked in either and both effect the whole 
process/task group.
   
   [pthread_kill(thread, SIGKILL), however, seems like kind of a silly use case 
since it is essentially equivalent to _exit().  But that is the compatible 
behavior]



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to