From 1a103bf142856ec129eb124d1dae70ddb3dd02e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Dejean?= Date: Sat, 28 Jan 2017 09:39:43 +0100 Subject: [PATCH] When parsing /proc/cpuinfo, ignore paragraphs that do not describe a CPU/core. --- sysdeps/linux/sysinfo.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/sysdeps/linux/sysinfo.c b/sysdeps/linux/sysinfo.c index 99d8fcc5..7dbd5eeb 100644 --- a/sysdeps/linux/sysinfo.c +++ b/sysdeps/linux/sysinfo.c @@ -50,13 +50,20 @@ init_sysinfo (glibtop *server) g_free(buffer); - for(sysinfo.ncpu = 0; - sysinfo.ncpu < GLIBTOP_NCPU && processors[sysinfo.ncpu] && *processors[sysinfo.ncpu]; - sysinfo.ncpu++) { + sysinfo.ncpu = 0; + for (char** this_proc = &processors[0]; *this_proc && **this_proc; this_proc++) { + + if (sysinfo.ncpu >= GLIBTOP_NCPU) { + glibtop_warn_r(server, "Cannot deal with more than %d CPUs", GLIBTOP_NCPU); + break; + } gchar **parts, **p; - if (g_strrstr (processors[sysinfo.ncpu], "processor" ) == NULL) - continue; + if (g_strrstr (*this_proc, "processor" ) == NULL) { + /* skip unknown paragraph */ + continue; + } + glibtop_entry * const cpuinfo = &sysinfo.cpuinfo[sysinfo.ncpu]; cpuinfo->labels = g_ptr_array_new (); @@ -68,7 +75,7 @@ init_sysinfo (glibtop *server) g_free, g_free); /* " : " */ - 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) { @@ -89,6 +96,7 @@ init_sysinfo (glibtop *server) g_free(parts); + sysinfo.ncpu++; } g_strfreev(processors);