diff --git a/Action.c b/Action.c index 5d774587..a63b30e4 100644 --- a/Action.c +++ b/Action.c @@ -174,8 +174,9 @@ static Htop_Reaction actionSetSortColumn(State* st) { char* name = NULL; if (fields[i] >= LAST_PROCESSFIELD) { DynamicColumn* column = Hashtable_get(dynamicColumns, fields[i]); - if (column) - name = xStrdup(column->caption ? column->caption : column->name); + if (!column) + continue; + name = xStrdup(column->caption ? column->caption : column->name); } else { name = String_trim(Process_fields[fields[i]].name); } diff --git a/pcp/PCPDynamicColumn.c b/pcp/PCPDynamicColumn.c index 141978a7..3c4e6797 100644 --- a/pcp/PCPDynamicColumn.c +++ b/pcp/PCPDynamicColumn.c @@ -287,6 +287,9 @@ void PCPDynamicColumn_writeField(PCPDynamicColumn* this, const Process* proc, Ri int PCPDynamicColumn_compareByKey(const PCPProcess* p1, const PCPProcess* p2, ProcessField key) { const PCPDynamicColumn* column = Hashtable_get(p1->super.processList->dynamicColumns, key); + if (!column) + return -1; + size_t metric = column->id; unsigned int type = PCPMetric_type(metric); 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);