Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 20 Jul 2026 02:00:31 +0000
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: b328975b9d7c - main - procdesc: report NOTE_PDSIGCHLD for traced and stopped process
Message-ID:  <6a5d813f.4468e.816c82d@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by kib:

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

commit b328975b9d7c475cd99107ca407df04366cc38af
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-07-18 17:31:31 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-07-20 02:00:02 +0000

    procdesc: report NOTE_PDSIGCHLD for traced and stopped process
    
    on attach of the knote.  It is same as for NOTE_EXIT when attaching to
    the exiting process.
    
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D58327
---
 sys/kern/sys_procdesc.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c
index fd4b660d6afa..94c2df4b1e69 100644
--- a/sys/kern/sys_procdesc.c
+++ b/sys/kern/sys_procdesc.c
@@ -493,16 +493,25 @@ static int
 procdesc_kqops_event(struct knote *kn, long hint)
 {
 	struct procdesc *pd;
+	struct proc *p;
 	u_int event;
 
 	pd = kn->kn_fp->f_data;
 	if (hint == 0) {
 		/*
 		 * Initial test after registration.  Generate notes in
-		 * case the process already terminated before registration.
+		 * case the process already terminated before
+		 * registration, or is stopped, or traced, with an event
+		 * pending.
 		 */
-		event = (pd->pd_flags & PDF_EXITED) != 0 ? (NOTE_EXIT |
-		    NOTE_PDSIGCHLD) : 0;
+		p = pd->pd_proc;
+		if ((pd->pd_flags & PDF_EXITED) != 0)
+			event = NOTE_EXIT | NOTE_PDSIGCHLD;
+		else if ((atomic_load_int(&p->p_flag) & (P_STOPPED_SIG |
+		    P_STOPPED_TRACE)) != 0)
+			event = NOTE_PDSIGCHLD;
+		else
+			event = 0;
 	} else {
 		/* Mask off extra data. */
 		event = (u_int)hint & NOTE_PCTRLMASK;


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a5d813f.4468e.816c82d>