Date: Thu, 27 May 2021 16:45:16 GMT From: Eric van Gyzen <vangyzen@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 427f12f150e8 - main - libprocstat kstack: fix race with thread creation Message-ID: <202105271645.14RGjGDE066553@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by vangyzen: URL: https://cgit.FreeBSD.org/src/commit/?id=427f12f150e875c40acb84f292a80bfa0b90a1a2 commit 427f12f150e875c40acb84f292a80bfa0b90a1a2 Author: Eric van Gyzen <vangyzen@FreeBSD.org> AuthorDate: 2021-05-27 16:33:22 +0000 Commit: Eric van Gyzen <vangyzen@FreeBSD.org> CommitDate: 2021-05-27 16:44:00 +0000 libprocstat kstack: fix race with thread creation When collecting kernel stacks for a target process, if the process adds a thread between the two calls to sysctl, ignore the additional threads. Previously, procstat would print only a useless error message. Now, it prints a consistent snapshot of the stacks. We know that snapshot is already stale, but it could still be stale even with a more complex fix to reallocate and retry, so such a fix is hardly worth the effort. Reported by: Daniel.Mitchell@emc.com MFC after: 1 week Sponsored by: Dell EMC Isilon --- lib/libprocstat/libprocstat.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/libprocstat/libprocstat.c b/lib/libprocstat/libprocstat.c index 7ccf6c343705..b754bc568e99 100644 --- a/lib/libprocstat/libprocstat.c +++ b/lib/libprocstat/libprocstat.c @@ -2609,7 +2609,8 @@ procstat_getkstack_sysctl(pid_t pid, int *cntp) warn("malloc(%zu)", len); return (NULL); } - if (sysctl(name, nitems(name), kkstp, &len, NULL, 0) == -1) { + if (sysctl(name, nitems(name), kkstp, &len, NULL, 0) == -1 && + errno != ENOMEM) { warn("sysctl: kern.proc.pid: %d", pid); free(kkstp); return (NULL);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202105271645.14RGjGDE066553>