From nobody Tue Jul 7 01:57:16 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gvPVh4dHzz6kd5l for ; Tue, 07 Jul 2026 01:57:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gvPVh2lNvz3V1d for ; Tue, 07 Jul 2026 01:57:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783389436; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=O+8ALE8r7IO9rf2zXPBfpkgSkka+/WrcPqw9bCC9dCk=; b=Vznp+5o8eyYMZlt5zqimuOb4zxW2PPoiItv577hwyW3qUbx7F/ftW7qeRU0t+I2aiSJAO2 R9OIkYR1QyBUAauxyn/moW87fdmN7IG4nAfxLdsYx3zEbfyHbuZ2p54PDhqWaY0giHaVhf 3oLXF5PDSqaxTn2LO/EV4dmP6/5Ulh2K8X8VVtSIVaSA7V41J6ISkMaQlk359UnhQGKNIn VNabLGZgvPBmPWibADdSV+KfK0P3VDi5PYBNFxMVtLvmhsRj94wl+eD0Cc9zGEDaG5G9su sI8CuTE9uAuo5cy1EPGTJScesJj5khrnN4Y43IQRHg7O+VnPSULi6WaN/m/fMg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1783389436; a=rsa-sha256; cv=none; b=L/cF85JN75gSif4KxV8FZQTeQS7ak2r/fSXfwZo3XeyRZ/I4PxLOb0rnN8bMP93YEOveSt Wgd8hwWVvIP4Za3T2G0jctDgT1wKeGLsxBXINtEZVHaRDh3fhi4FbcuotxaVaCYu0K3Htx KoWH3MU+i+I+nFaSBCZdQ4re02mA10oO8SATB+7bgKH0sNG5JJ/LpIz3/zLFPUcmmLogoJ huxnTwJUf9otIuq8HsXl0Q0YOgdJ11hJ2A4qiDGbt2dYLPmLIxNQjirpIPEMDXUwkOeGkJ DlO2iloAcJhcYDITnZTdBVZOVxoM5uBZpCrnROVDdnb9nqKYvcen3sxCfnhPag== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783389436; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=O+8ALE8r7IO9rf2zXPBfpkgSkka+/WrcPqw9bCC9dCk=; b=IVSLnuAXlwuVSQYPnVJYTvTNhjETTr4Bzi+BBdTEIXM3eqc0Y4EazEy4LW4lgUF1pYzbU0 Xk/uFAfjwQr/3txxtKdLKw0TS2dTuyebwZrFjpo7oBQlYs3dliwb/+P4+kI4qOrh3TMeLv RTpcQFzJA8QHrXzuZ3ZjeZ3kXgdomeW53CSxEUFWpjWHdPKfbXopTchoFvnMfv8YbGRowp iRtoO3HceyWi63YQQg3bXZIx9S1G4UxgetWcKW7jUnRajJQJPWUy9jkYWDp2grA5BxFXXw MywEuRAHNTARezIMlj+xLaoqwewj6NamznSZ1qpBva2gQv0okT5uFtclS/sN/g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gvPVh1TXBzBx for ; Tue, 07 Jul 2026 01:57:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3f652 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 07 Jul 2026 01:57:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: c0e1201aaba8 - main - procdesc: make PD_DAEMON per-file List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c0e1201aaba8860bdcfd754e35024a85ceb1580a Auto-Submitted: auto-generated Date: Tue, 07 Jul 2026 01:57:16 +0000 Message-Id: <6a4c5cfc.3f652.2e2ec0be@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=c0e1201aaba8860bdcfd754e35024a85ceb1580a commit c0e1201aaba8860bdcfd754e35024a85ceb1580a Author: Konstantin Belousov AuthorDate: 2026-05-25 17:48:03 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-07 01:24:28 +0000 procdesc: make PD_DAEMON per-file Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124 --- sys/kern/sys_procdesc.c | 26 +++++++++++++++++--------- sys/sys/file.h | 1 + sys/sys/procdesc.h | 7 ++++++- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c index c5be98f66749..0d57a8cc7b2c 100644 --- a/sys/kern/sys_procdesc.c +++ b/sys/kern/sys_procdesc.c @@ -209,8 +209,6 @@ procdesc_alloc(int flags) pd = malloc(sizeof(*pd), M_PROCDESC, M_WAITOK | M_ZERO); pd->pd_flags = 0; pd->pd_pid = -1; - if ((flags & PD_DAEMON) != 0) - pd->pd_flags |= PDF_DAEMON; PROCDESC_LOCK_INIT(pd); knlist_init_mtx(&pd->pd_selinfo.si_note, &pd->pd_lock); @@ -260,7 +258,12 @@ int procdesc_falloc(struct thread *td, struct file **resultfp, int *resultfd, int flags, struct filecaps *fcaps) { - return (falloc_caps(td, resultfp, resultfd, pdtofdflags(flags), fcaps)); + int error; + + error = falloc_caps(td, resultfp, resultfd, pdtofdflags(flags), fcaps); + if (error == 0 && (flags & PD_DAEMON) != 0) + (*resultfp)->f_pdflags |= F_PD_NOKILL; + return (error); } /* @@ -369,6 +372,15 @@ procdesc_reap(struct proc *p) procdesc_free(pd); } +static void +procdesc_close_tail(struct file *fp, struct proc *p) +{ + if ((fp->f_pdflags & F_PD_NOKILL) == 0) + kern_psignal(p, SIGKILL); + PROC_UNLOCK(p); + sx_xunlock(&proctree_lock); +} + /* * procdesc_close() - last close on a process descriptor. If the process is * still running, terminate with SIGKILL (unless PDF_DAEMON is set) and let @@ -436,13 +448,9 @@ procdesc_close(struct file *fp, struct thread *td) p->p_oppid = p->p_reaper->p_pid; proc_add_orphan(p, p->p_reaper); } - if ((pd->pd_flags & PDF_DAEMON) == 0) - kern_psignal(p, SIGKILL); - PROC_UNLOCK(p); - sx_xunlock(&proctree_lock); + procdesc_close_tail(fp, p); } else { - PROC_UNLOCK(p); - sx_xunlock(&proctree_lock); + procdesc_close_tail(fp, p); } } diff --git a/sys/sys/file.h b/sys/sys/file.h index f5d0778453d1..a5125d0559b1 100644 --- a/sys/sys/file.h +++ b/sys/sys/file.h @@ -213,6 +213,7 @@ struct file { union { int16_t f_seqcount[2]; /* (a) Count of seq. reads and writes. */ int f_pipegen; + int f_pdflags; /* Per-file flags for procdesc. */ }; off_t f_nextoff[2]; /* next expected read/write offset. */ union { diff --git a/sys/sys/procdesc.h b/sys/sys/procdesc.h index 08b563828b95..5fbd43f1ac84 100644 --- a/sys/sys/procdesc.h +++ b/sys/sys/procdesc.h @@ -89,7 +89,12 @@ struct procdesc { * Flags for the pd_flags field. */ #define PDF_EXITED 0x00000004 /* Process exited. */ -#define PDF_DAEMON 0x00000008 /* Don't exit when procdesc closes. */ + +/* + * Flags for file f_pdflags. + */ +#define F_PD_NOKILL 0x00000001 /* Opened with PD_DAEMON. Don't send + SIGKILL when file closes. */ /* * In-kernel interfaces to process descriptors.