summaryrefslogtreecommitdiffstats
path: root/pcp/PCPMetric.c
diff options
context:
space:
mode:
authorNathan Scott <nathans@redhat.com>2021-10-05 13:20:13 +1100
committerNathan Scott <nathans@redhat.com>2021-10-05 15:53:18 +1100
commit8ac8542b6e710fde88aa444f8379a4ddfdfce6d3 (patch)
treefa86211c84bdede4d93866fe5c418ded41d3c44a /pcp/PCPMetric.c
parentf75a8bc3a1131151181d6794000b10063400221e (diff)
Handle interrupted sampling from within libpcp PDU transfers
This situation can arise if pcp-htop screen is resized right at the same time sampling from pmcd(1) is happening. Have a couple more goes at it before giving up entirely; once there is no data available though we cannot proceed into accessing the sample result data structure (segv will result) so a new short-circuit guard is added there also.
Diffstat (limited to 'pcp/PCPMetric.c')
-rw-r--r--pcp/PCPMetric.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/pcp/PCPMetric.c b/pcp/PCPMetric.c
index d1afc801..f6d4c97b 100644
--- a/pcp/PCPMetric.c
+++ b/pcp/PCPMetric.c
@@ -164,7 +164,10 @@ bool PCPMetric_fetch(struct timeval* timestamp) {
pmFreeResult(pcp->result);
pcp->result = NULL;
}
- int sts = pmFetch(pcp->totalMetrics, pcp->fetch, &pcp->result);
+ int sts, count = 0;
+ do {
+ sts = pmFetch(pcp->totalMetrics, pcp->fetch, &pcp->result);
+ } while (sts == PM_ERR_IPC && ++count < 3);
if (sts < 0) {
if (pmDebugOptions.appl0)
fprintf(stderr, "Error: cannot fetch metric values: %s\n",

© 2014-2024 Faster IT GmbH | imprint | privacy policy