git: 427f12f150e8 - main - libprocstat kstack: fix race with thread creation
Eric van Gyzen
vangyzen at FreeBSD.org
Thu May 27 16:45:16 UTC 2021
The branch main has been updated by vangyzen:
URL: https://cgit.FreeBSD.org/src/commit/?id=427f12f150e875c40acb84f292a80bfa0b90a1a2
commit 427f12f150e875c40acb84f292a80bfa0b90a1a2
Author: Eric van Gyzen <vangyzen at FreeBSD.org>
AuthorDate: 2021-05-27 16:33:22 +0000
Commit: Eric van Gyzen <vangyzen at 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 at 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);
More information about the dev-commits-src-main
mailing list