The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=b599982b65e36523a8aa828a9d504135144158db

commit b599982b65e36523a8aa828a9d504135144158db
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2021-10-03 01:52:39 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2021-10-06 14:05:22 +0000

    Move td_pflags2 TDP2_SIGWAIT to td_flags TDF_SIGWAIT
    
    The flag should be accessible from non-current threads.
    
    Reviewed by:    markj
    Tested by:      trasz
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D32252
---
 sys/kern/kern_sig.c | 17 +++++++++++------
 sys/sys/proc.h      |  3 +--
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 95eb8d5cc564..b20aea21333e 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1278,8 +1278,11 @@ kern_sigtimedwait(struct thread *td, sigset_t waitset, 
ksiginfo_t *ksi,
        saved_mask = td->td_sigmask;
        SIGSETNAND(td->td_sigmask, waitset);
        if ((p->p_sysent->sv_flags & SV_SIG_DISCIGN) != 0 ||
-           !kern_sig_discard_ign)
-               td->td_pflags2 |= TDP2_SIGWAIT;
+           !kern_sig_discard_ign) {
+               thread_lock(td);
+               td->td_flags |= TDF_SIGWAIT;
+               thread_unlock(td);
+       }
        for (;;) {
                mtx_lock(&ps->ps_mtx);
                sig = cursig(td);
@@ -1343,7 +1346,9 @@ kern_sigtimedwait(struct thread *td, sigset_t waitset, 
ksiginfo_t *ksi,
                if (error == 0 && (p->p_ptevents & PTRACE_SYSCALL) != 0)
                        traced = true;
        }
-       td->td_pflags2 &= ~TDP2_SIGWAIT;
+       thread_lock(td);
+       td->td_flags &= ~TDF_SIGWAIT;
+       thread_unlock(td);
 
        new_block = saved_mask;
        SIGSETNAND(new_block, td->td_sigmask);
@@ -2951,7 +2956,7 @@ issignal(struct thread *td)
                 */
                if (SIGISMEMBER(ps->ps_sigignore, sig) &&
                    (p->p_flag & P_TRACED) == 0 &&
-                   (td->td_pflags2 & TDP2_SIGWAIT) == 0) {
+                   (td->td_flags & TDF_SIGWAIT) == 0) {
                        sigqueue_delete(&td->td_sigqueue, sig);
                        sigqueue_delete(&p->p_sigqueue, sig);
                        continue;
@@ -3064,7 +3069,7 @@ issignal(struct thread *td)
                                mtx_lock(&ps->ps_mtx);
                                goto next;
                        } else if ((prop & SIGPROP_IGNORE) != 0 &&
-                           (td->td_pflags2 & TDP2_SIGWAIT) == 0) {
+                           (td->td_flags & TDF_SIGWAIT) == 0) {
                                /*
                                 * Default action is to ignore; drop it if
                                 * not in kern_sigtimedwait().
@@ -3075,7 +3080,7 @@ issignal(struct thread *td)
                        /*NOTREACHED*/
 
                case (intptr_t)SIG_IGN:
-                       if ((td->td_pflags2 & TDP2_SIGWAIT) == 0)
+                       if ((td->td_flags & TDF_SIGWAIT) == 0)
                                break;          /* == ignore */
                        else
                                return (sig);
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index 3d01aae2d06b..8fa9406bd378 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -446,7 +446,7 @@ do {                                                        
                \
 #define        TDF_TIMEOUT     0x00000010 /* Timing out during sleep. */
 #define        TDF_IDLETD      0x00000020 /* This is a per-CPU idle thread. */
 #define        TDF_CANSWAP     0x00000040 /* Thread can be swapped. */
-#define        TDF_UNUSED80    0x00000080 /* unused. */
+#define        TDF_SIGWAIT     0x00000080 /* Ignore ignored signals */
 #define        TDF_KTH_SUSP    0x00000100 /* kthread is suspended */
 #define        TDF_ALLPROCSUSP 0x00000200 /* suspended by SINGLE_ALLPROC */
 #define        TDF_BOUNDARY    0x00000400 /* Thread suspended at user boundary 
*/
@@ -531,7 +531,6 @@ do {                                                        
                \
 #define        TDP2_SBPAGES    0x00000001 /* Owns sbusy on some pages */
 #define        TDP2_COMPAT32RB 0x00000002 /* compat32 ABI for robust lists */
 #define        TDP2_ACCT       0x00000004 /* Doing accounting */
-#define        TDP2_SIGWAIT    0x00000008 /* Ignore ignored signals */
 
 /*
  * Reasons that the current thread can not be run yet.

Reply via email to