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]