When parsing /proc/cpuinfo, ignore paragraphs that do not describe a CPU/core.

This commit is contained in:
Benoît Dejean
2017-01-28 09:39:43 +01:00
parent 3ff313dd03
commit 1a103bf142

View File

@@ -50,13 +50,20 @@ init_sysinfo (glibtop *server)
g_free(buffer); g_free(buffer);
for(sysinfo.ncpu = 0; sysinfo.ncpu = 0;
sysinfo.ncpu < GLIBTOP_NCPU && processors[sysinfo.ncpu] && *processors[sysinfo.ncpu]; for (char** this_proc = &processors[0]; *this_proc && **this_proc; this_proc++) {
sysinfo.ncpu++) {
if (sysinfo.ncpu >= GLIBTOP_NCPU) {
glibtop_warn_r(server, "Cannot deal with more than %d CPUs", GLIBTOP_NCPU);
break;
}
gchar **parts, **p; gchar **parts, **p;
if (g_strrstr (processors[sysinfo.ncpu], "processor" ) == NULL) if (g_strrstr (*this_proc, "processor" ) == NULL) {
continue; /* skip unknown paragraph */
continue;
}
glibtop_entry * const cpuinfo = &sysinfo.cpuinfo[sysinfo.ncpu]; glibtop_entry * const cpuinfo = &sysinfo.cpuinfo[sysinfo.ncpu];
cpuinfo->labels = g_ptr_array_new (); cpuinfo->labels = g_ptr_array_new ();
@@ -68,7 +75,7 @@ init_sysinfo (glibtop *server)
g_free, g_free); g_free, g_free);
/* "<key> : <value>" */ /* "<key> : <value>" */
parts = g_strsplit_set(processors[sysinfo.ncpu], ":\n", 0); parts = g_strsplit_set(*this_proc, ":\n", 0);
for(p = parts; *p && *(p+1); p += 2) { for(p = parts; *p && *(p+1); p += 2) {
@@ -89,6 +96,7 @@ init_sysinfo (glibtop *server)
g_free(parts); g_free(parts);
sysinfo.ncpu++;
} }
g_strfreev(processors); g_strfreev(processors);