From nobody Sun Feb 1 21:40:55 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 4f438S2x66z6QjjX for ; Sun, 01 Feb 2026 21:40:56 +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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4f438R3FWGz3FYR for ; Sun, 01 Feb 2026 21:40:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1769982055; 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=I0/WagjB/tPVTr9bvyFWJTJlOvihHLXNC24Ju95PFcs=; b=U5o7pOctrXcVgEF4d5WHQ/A+RuDermPZ0pCFpAY8rmMolyocjpSpf7H+BErInm74lZIsF3 wpS2S6Z/jwoJdxnOKzjMWZmAkdMZg7GXRfYCIU0N0PUkYoe2nQbzG0zt4a2FeS5YViNov1 Mnhz0bPcoJZ252ybnC0YOjiUenwq3XSvriEhNPjt1jI6yJ9uzsvp7Ux3iz6b2PBZV7vo/W ikLgSYc9p3INiRKXmJT93R6cjuTLZhufouWQXYoI9CKPY5z55R5CRvaSRhB7uRQClxBbj1 V6ltwrXIA4XP5ZiS5e/mojh9xzOuwLSm8aq5Y5w1JDnZ2shPrIqHxGv1MpQy/A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1769982055; a=rsa-sha256; cv=none; b=xK6jaSFn7yXdO9kPGmVSV7wUPX8BS71NyGMTcjdfLQSvjtBby03uKWYh3qcKu/60a9Hy8K NewQOkImh5ZeHzNmxJKfWpZ3HhVdwF3j8meKHHLrdroZ6oY1u8cHBuHC6RZERRTKrJXRWV qrabXNv98ljh8P+3lSTTMHMqIBnYSbTlHUilEfdWayKybO4qMnLXbKdBO7fXTpA9SQcTEv AG76BgaEmJmjDlYWODSDDbyCz+XgBRrjePhqbTo3kG7BxkqlDdpng+Rz/s9H85mVqvf0Mi EOTO+J/HeD92Vdd6i0vfJpFsAxk93rxFELapcbBeMaWZITTMhzT6sDmg4OTdrQ== 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=1769982055; 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=I0/WagjB/tPVTr9bvyFWJTJlOvihHLXNC24Ju95PFcs=; b=u3kyxseChLxC6791XNdk3cdj3ewBGF0JNCTClg07PUdCMjZJhhZ57Hndm57ti4+kgLdhsj M4A00gP/lxIV/TMA9ZexYHQ9pqZJYHyttsX2UJESXLr6zvGpN7nRfEPOKfVkQUWUO4x0qF pHc3OX3Zoo2IoAIz4ml+7epMr+VTYbt1QmHHoqNhrM/5hYWVXl+m1rEj0t64T7HxzKEKQK jrBwSYAp7L+6eakf7/2D+fy6SfCdtpH522eDnr0Se61ySPR6aw4HaMy383vVAnwpIhLWDi Hm8JwWXMCCF7dpHaCM2eNk1cukqEexyh4YWfgu4N1wAQzjPbcFF6gRcyCefFjg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4f438R2mx4zxNB for ; Sun, 01 Feb 2026 21:40:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3d2a2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 01 Feb 2026 21:40:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 2e5b89c5ac3d - stable/15 - kern/kern_exit.c: extract some helpers from proc_to_reap() 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 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/stable/15 X-Git-Reftype: branch X-Git-Commit: 2e5b89c5ac3d6c5247522ed4f86a6bf0ff32a2f1 Auto-Submitted: auto-generated Date: Sun, 01 Feb 2026 21:40:55 +0000 Message-Id: <697fc867.3d2a2.46130d76@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=2e5b89c5ac3d6c5247522ed4f86a6bf0ff32a2f1 commit 2e5b89c5ac3d6c5247522ed4f86a6bf0ff32a2f1 Author: Konstantin Belousov AuthorDate: 2026-01-08 04:19:04 +0000 Commit: Konstantin Belousov CommitDate: 2026-02-01 21:38:48 +0000 kern/kern_exit.c: extract some helpers from proc_to_reap() (cherry picked from commit 2b67cfa39d8367a021d165681a1e7f54c6020470) --- sys/kern/kern_exit.c | 116 +++++++++++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 50 deletions(-) diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index 60e7a9da9f8b..df1bd25fbac8 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -1042,13 +1042,75 @@ proc_reap(struct thread *td, struct proc *p, int *status, int options) atomic_add_int(&nprocs, -1); } +static void +wait_fill_siginfo(struct proc *p, siginfo_t *siginfo) +{ + PROC_LOCK_ASSERT(p, MA_OWNED); + + if (siginfo == NULL) + return; + + bzero(siginfo, sizeof(*siginfo)); + siginfo->si_errno = 0; + + /* + * SUSv4 requires that the si_signo value is always + * SIGCHLD. Obey it despite the rfork(2) interface allows to + * request other signal for child exit notification. + */ + siginfo->si_signo = SIGCHLD; + + /* + * This is still a rough estimate. We will fix the cases + * TRAPPED, STOPPED, and CONTINUED later. + */ + if (WCOREDUMP(p->p_xsig)) { + siginfo->si_code = CLD_DUMPED; + siginfo->si_status = WTERMSIG(p->p_xsig); + } else if (WIFSIGNALED(p->p_xsig)) { + siginfo->si_code = CLD_KILLED; + siginfo->si_status = WTERMSIG(p->p_xsig); + } else { + siginfo->si_code = CLD_EXITED; + siginfo->si_status = p->p_xexit; + } + + siginfo->si_pid = p->p_pid; + siginfo->si_uid = p->p_ucred->cr_uid; + + /* + * The si_addr field would be useful additional detail, but + * apparently the PC value may be lost when we reach this + * point. bzero() above sets siginfo->si_addr to NULL. + */ +} + +static void +wait_fill_wrusage(struct proc *p, struct __wrusage *wrusage) +{ + struct rusage *rup; + + PROC_LOCK_ASSERT(p, MA_OWNED); + + if (wrusage == NULL) + return; + + rup = &wrusage->wru_self; + *rup = p->p_ru; + PROC_STATLOCK(p); + calcru(p, &rup->ru_utime, &rup->ru_stime); + PROC_STATUNLOCK(p); + + rup = &wrusage->wru_children; + *rup = p->p_stats->p_cru; + calccru(p, &rup->ru_utime, &rup->ru_stime); +} + static int proc_to_reap(struct thread *td, struct proc *p, idtype_t idtype, id_t id, int *status, int options, struct __wrusage *wrusage, siginfo_t *siginfo, int check_only) { - struct rusage *rup; - sx_assert(&proctree_lock, SA_XLOCKED); PROC_LOCK(p); @@ -1133,60 +1195,14 @@ proc_to_reap(struct thread *td, struct proc *p, idtype_t idtype, id_t id, return (0); } - if (siginfo != NULL) { - bzero(siginfo, sizeof(*siginfo)); - siginfo->si_errno = 0; - - /* - * SUSv4 requires that the si_signo value is always - * SIGCHLD. Obey it despite the rfork(2) interface - * allows to request other signal for child exit - * notification. - */ - siginfo->si_signo = SIGCHLD; - - /* - * This is still a rough estimate. We will fix the - * cases TRAPPED, STOPPED, and CONTINUED later. - */ - if (WCOREDUMP(p->p_xsig)) { - siginfo->si_code = CLD_DUMPED; - siginfo->si_status = WTERMSIG(p->p_xsig); - } else if (WIFSIGNALED(p->p_xsig)) { - siginfo->si_code = CLD_KILLED; - siginfo->si_status = WTERMSIG(p->p_xsig); - } else { - siginfo->si_code = CLD_EXITED; - siginfo->si_status = p->p_xexit; - } - - siginfo->si_pid = p->p_pid; - siginfo->si_uid = p->p_ucred->cr_uid; - - /* - * The si_addr field would be useful additional - * detail, but apparently the PC value may be lost - * when we reach this point. bzero() above sets - * siginfo->si_addr to NULL. - */ - } + wait_fill_siginfo(p, siginfo); /* * There should be no reason to limit resources usage info to * exited processes only. A snapshot about any resources used * by a stopped process may be exactly what is needed. */ - if (wrusage != NULL) { - rup = &wrusage->wru_self; - *rup = p->p_ru; - PROC_STATLOCK(p); - calcru(p, &rup->ru_utime, &rup->ru_stime); - PROC_STATUNLOCK(p); - - rup = &wrusage->wru_children; - *rup = p->p_stats->p_cru; - calccru(p, &rup->ru_utime, &rup->ru_stime); - } + wait_fill_wrusage(p, wrusage); if (p->p_state == PRS_ZOMBIE && !check_only) { proc_reap(td, p, status, options);