diff options
author | er-azh <80633916+er-azh@users.noreply.github.com> | 2022-03-26 17:27:36 +0430 |
---|---|---|
committer | er-azh <80633916+er-azh@users.noreply.github.com> | 2022-03-26 17:27:36 +0430 |
commit | ba4c67942c98716fcfd1fd576421a964077cefed (patch) | |
tree | 9aff88275c94165d2c5377e3bd67ef88bf594e4e /linux/LinuxProcessList.c | |
parent | 3f0c172a601574454a8f8009f3b45e89aa120475 (diff) |
Linux: allocate cpuData before reading cpu count.
Diffstat (limited to 'linux/LinuxProcessList.c')
-rw-r--r-- | linux/LinuxProcessList.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index 3002e829..67493cd0 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -174,16 +174,19 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) { LinuxProcessList* this = (LinuxProcessList*) super; unsigned int existing = 0, active = 0; - DIR* dir = opendir("/sys/devices/system/cpu"); - if (!dir) { + // Initialize the cpuData array before anything else. + if (!this->cpuData) { this->cpuData = xReallocArrayZero(this->cpuData, super->existingCPUs ? (super->existingCPUs + 1) : 0, 2, sizeof(CPUData)); this->cpuData[0].online = true; /* average is always "online" */ this->cpuData[1].online = true; super->activeCPUs = 1; super->existingCPUs = 1; - return; } + DIR* dir = opendir("/sys/devices/system/cpu"); + if (!dir) + return; + unsigned int currExisting = super->existingCPUs; const struct dirent* entry; @@ -233,6 +236,10 @@ static void LinuxProcessList_updateCPUcount(ProcessList* super) { closedir(dir); + // return if no CPU is found + if (existing < 1) + return; + #ifdef HAVE_SENSORS_SENSORS_H /* When started with offline CPUs, libsensors does not monitor those, * even when they become online. */ |