From nobody Sat May 3 15:19:59 2025 X-Original-To: dev-commits-src-branches@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 4ZqWgN10tcz5vSqY; Sat, 03 May 2025 15:20:00 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4ZqWgN0BKNz3Kdb; Sat, 03 May 2025 15:20:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746285600; 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=M46ibDhaF2jkGuXfKOUq2WRlOxDJe3fWT792b/1Ff9g=; b=ePC38wxIMHP0jelO0uyrp8/SGqNA6typIdc3TzFDKGtU4ekvjLNlwVaQjC+cPnUScAA4oC bSOfs8JrZRZg/2RPo0Wl8NbVYsppuZo50KrWbCZcLJrkIBBqMBfpnqCEM5/c0XHnmcUVf7 ikrIGKzFny0dOFn6byT9ukyZx/GJO9v3Hd0kPRaT4h5cMzbMVJd95vkrPGxrkxHpqaP+KM cXOgdfFOwFbC5oFLXmjhbLupK2uyf/pAnc7Xc5Ubf5AOUENwHH1FaG1fEtIfWC9Bv4ZigR V/ng5lCfIw0KeHIxYHdV9VOz1WSWxpuDBkCl19p1dRu6V8qcePX8YtMK0z45LQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1746285600; 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=M46ibDhaF2jkGuXfKOUq2WRlOxDJe3fWT792b/1Ff9g=; b=S50K4qRGhuc3UJCykL9YF1A2aA33YRuqupDLgh7cYoCu2eKiGIwkTdkausVzmUqVYV+38a e2Ix3LzejB0I0nUPjTxj6J/nDr8/YJY/csfwDrdXHvA6eDcA9QwPOHhuoYMib4uOI0xtwq g8EEvQQIXd9CoI9Z/uH1nS8iDLbUg7BYrkmDIpMqkdx9Ru8N3fZ4RDrbb9oZSLhTrMiTkj 4h09BpXyViNUr49q920y4/f1/scMs0HFqo6a8zcMZcg/++2wUKgz3pLDnyrGRc/NsMHOFQ +67RJ7oDBtL0VAVSn0U8AwIuP7tLzKoDEs7jM4mnH62VngysQHTM1NRIytK5aA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1746285600; a=rsa-sha256; cv=none; b=usuZ7hJeJKeRF4D7hZgn10AKBkQf71AP2bX7q9YFekSEVAaXLAZ6o/inKbFxQ382ki4628 RmKo5mBcsi8bgIRLpJgS7fd41KOjRgexejaqzIaekSuKkhSU3yZ30b4IuCAQqjgXpA2cPr B/QaCbYaPky3TeF/m50wWBhAHjNeqbcRv7RGWeG8EXlnMtBB1HSc0z1XxhWEpR/MutZS4x Mo3Fz5ixzVJanuE/d23sJMoOKzO8QtMXGnipHq0FuQJLw8qwi7wSrcA6x4AsVCPnnwVqbG pAj68XyvuT4KlvlxE8QE+0ZyHMzBVVeK0Xl83+Hk0Ao50Z6FYmAZywWfZlgpug== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4ZqWgM6fsrznPh; Sat, 03 May 2025 15:19:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 543FJxoL045869; Sat, 3 May 2025 15:19:59 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 543FJxVE045866; Sat, 3 May 2025 15:19:59 GMT (envelope-from git) Date: Sat, 3 May 2025 15:19:59 GMT Message-Id: <202505031519.543FJxVE045866@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 4c989e2aba99 - stable/14 - kern_sig.c: extract the first stop handling into a helper List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/14 X-Git-Reftype: branch X-Git-Commit: 4c989e2aba9956bac2a70438eb7a4116bc75c27d Auto-Submitted: auto-generated The branch stable/14 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=4c989e2aba9956bac2a70438eb7a4116bc75c27d commit 4c989e2aba9956bac2a70438eb7a4116bc75c27d Author: Konstantin Belousov AuthorDate: 2025-04-17 11:44:51 +0000 Commit: Konstantin Belousov CommitDate: 2025-05-03 15:19:41 +0000 kern_sig.c: extract the first stop handling into a helper (cherry picked from commit 4048ccc6ae374c015c31f7b35221d5da8fe7d63f) --- sys/kern/kern_sig.c | 43 ++++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 8e5c9f247b57..a81ae86965f3 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -117,6 +117,8 @@ static int filt_signal(struct knote *kn, long hint); static struct thread *sigtd(struct proc *p, int sig, bool fast_sigblock); static void sigqueue_start(void); static void sigfastblock_setpend(struct thread *td, bool resched); +static void sig_handle_first_stop(struct thread *td, struct proc *p, + int sig, bool ext); static uma_zone_t ksiginfo_zone = NULL; const struct filterops sig_filtops = { @@ -2830,6 +2832,29 @@ sig_suspend_threads(struct thread *td, struct proc *p) return (wakeup_swapper); } +static void +sig_handle_first_stop(struct thread *td, struct proc *p, int sig, bool ext) +{ + if ((td->td_dbgflags & TDB_FSTP) == 0 && + ((p->p_flag2 & P2_PTRACE_FSTP) != 0 || + p->p_xthread != NULL)) + return; + + p->p_xsig = sig; + p->p_xthread = td; + + /* + * If we are on sleepqueue already, let sleepqueue + * code decide if it needs to go sleep after attach. + */ + if (ext || td->td_wchan == NULL) + td->td_dbgflags &= ~TDB_FSTP; + + p->p_flag2 &= ~P2_PTRACE_FSTP; + p->p_flag |= P_STOPPED_SIG | P_STOPPED_TRACE; + sig_suspend_threads(td, p); +} + /* * Stop the process for an event deemed interesting to the debugger. If si is * non-NULL, this is a signal exchange; the new signal requested by the @@ -2890,24 +2915,8 @@ ptracestop(struct thread *td, int sig, ksiginfo_t *si) * already set p_xthread, the current thread will get * a chance to report itself upon the next iteration. */ - if ((td->td_dbgflags & TDB_FSTP) != 0 || - ((p->p_flag2 & P2_PTRACE_FSTP) == 0 && - p->p_xthread == NULL)) { - p->p_xsig = sig; - p->p_xthread = td; + sig_handle_first_stop(td, p, sig, false); - /* - * If we are on sleepqueue already, - * let sleepqueue code decide if it - * needs to go sleep after attach. - */ - if (td->td_wchan == NULL) - td->td_dbgflags &= ~TDB_FSTP; - - p->p_flag2 &= ~P2_PTRACE_FSTP; - p->p_flag |= P_STOPPED_SIG | P_STOPPED_TRACE; - sig_suspend_threads(td, p); - } if ((td->td_dbgflags & TDB_STOPATFORK) != 0) { td->td_dbgflags &= ~TDB_STOPATFORK; }