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



commit 1a103bf142856ec129eb124d1dae70ddb3dd02e8
Author: Benoît Dejean <bdejean gmail com>
Date:   Sat Jan 28 09:39:43 2017 +0100

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

 sysdeps/linux/sysinfo.c |   20 ++++++++++++++------
 1 files changed, 14 insertions(+), 6 deletions(-)
---
diff --git a/sysdeps/linux/sysinfo.c b/sysdeps/linux/sysinfo.c
index 99d8fcc..7dbd5ee 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);
 
                /* "<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) {
 
@@ -89,6 +96,7 @@ init_sysinfo (glibtop *server)
 
                g_free(parts);
 
+               sysinfo.ncpu++;
        }
 
        g_strfreev(processors);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]