Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Jan 2022 00:46:14 GMT
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 29887e602b6e - stable/13 - truss(1): detach more carefully
Message-ID:  <202201190046.20J0kEfJ016112@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by kib:

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

commit 29887e602b6e00d886348f3a5a65dc0070a7d7ef
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2022-01-12 08:21:19 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2022-01-19 00:46:08 +0000

    truss(1): detach more carefully
    
    (cherry picked from commit 12f747e6ff675edfc1f2f95f7fc435dc01e0c29c)
---
 usr.bin/truss/setup.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/usr.bin/truss/setup.c b/usr.bin/truss/setup.c
index 78be0c7f570f..d98e618d9c43 100644
--- a/usr.bin/truss/setup.c
+++ b/usr.bin/truss/setup.c
@@ -223,11 +223,24 @@ restore_proc(int signo __unused)
 static void
 detach_proc(pid_t pid)
 {
+	int sig, status;
 
-	/* stop the child so that we can detach */
+	/*
+	 * Stop the child so that we can detach.  Filter out possible
+	 * lingering SIGTRAP events buffered in the threads.
+	 */
 	kill(pid, SIGSTOP);
-	if (waitpid(pid, NULL, 0) < 0)
-		err(1, "Unexpected stop in waitpid");
+	for (;;) {
+		if (waitpid(pid, &status, 0) < 0)
+			err(1, "Unexpected error in waitpid");
+		sig = WIFSTOPPED(status) ? WSTOPSIG(status) : 0;
+		if (sig == SIGSTOP)
+			break;
+		if (sig == SIGTRAP)
+			sig = 0;
+		if (ptrace(PT_CONTINUE, pid, (caddr_t)1, sig) < 0)
+			err(1, "Can not continue for detach");
+	}
 
 	if (ptrace(PT_DETACH, pid, (caddr_t)1, 0) < 0)
 		err(1, "Can not detach the process");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202201190046.20J0kEfJ016112>