From c7f634ec218da6bdb3bab9e9cd6fa7b2df3fcea8 Mon Sep 17 00:00:00 2001 From: Nathan Scott Date: Tue, 17 Aug 2021 14:41:55 +1000 Subject: [PATCH] PCP: ensure unsigned types used throughout CPU count detection This cannot be negative in these code locations, but for the purposes of static checking like Coverity scan make it clear and used the same unsigned type as ProcessList.h for the CPU count variable (matching PL activeCPUs and existingCPUs). --- pcp/PCPProcessList.c | 2 +- pcp/Platform.c | 8 ++++---- pcp/Platform.h | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pcp/PCPProcessList.c b/pcp/PCPProcessList.c index e4f9a5fd..3001d5e8 100644 --- a/pcp/PCPProcessList.c +++ b/pcp/PCPProcessList.c @@ -35,7 +35,7 @@ static void PCPProcessList_updateCPUcount(PCPProcessList* this) { unsigned int cpus = Platform_getMaxCPU(); if (cpus == pl->existingCPUs) return; - if (cpus <= 0) + if (cpus == 0) cpus = pl->activeCPUs; if (cpus <= 1) cpus = pl->activeCPUs = 1; diff --git a/pcp/Platform.c b/pcp/Platform.c index 97788569..d5a76b55 100644 --- a/pcp/Platform.c +++ b/pcp/Platform.c @@ -396,15 +396,15 @@ void Platform_getLoadAverage(double* one, double* five, double* fifteen) { } } -int Platform_getMaxCPU(void) { +unsigned int Platform_getMaxCPU(void) { if (pcp->ncpu) return pcp->ncpu; pmAtomValue value; - if (PCPMetric_values(PCP_HINV_NCPU, &value, 1, PM_TYPE_32) != NULL) - pcp->ncpu = value.l; + if (PCPMetric_values(PCP_HINV_NCPU, &value, 1, PM_TYPE_U32) != NULL) + pcp->ncpu = value.ul; else - pcp->ncpu = -1; + pcp->ncpu = 1; return pcp->ncpu; } diff --git a/pcp/Platform.h b/pcp/Platform.h index 9d0c8f53..dcb8dc98 100644 --- a/pcp/Platform.h +++ b/pcp/Platform.h @@ -54,7 +54,7 @@ typedef struct Platform_ { long long btime; /* boottime in seconds since the epoch */ char* release; /* uname and distro from this context */ int pidmax; /* maximum platform process identifier */ - int ncpu; /* maximum processor count configured */ + unsigned int ncpu; /* maximum processor count configured */ } Platform; extern ProcessField Platform_defaultFields[]; @@ -79,7 +79,7 @@ void Platform_getLoadAverage(double* one, double* five, double* fifteen); long long Platform_getBootTime(void); -int Platform_getMaxCPU(void); +unsigned int Platform_getMaxCPU(void); int Platform_getMaxPid(void);