summaryrefslogtreecommitdiff
blob: 2b389fecdd68044c347cd7449bfb50bbe2969f36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
--- wmfire-1.2.4/src/wmfire.c.orig	2005-12-04 11:39:16.000000000 +0100
+++ wmfire-1.2.4/src/wmfire.c	2012-02-27 15:48:05.136807354 +0100
@@ -63,6 +63,10 @@
 #define FIRE_NET	3
 #define FIRE_FILE	4
 
+/* wbk 20120220 - cleaning up "next cpu" logic          */
+#define CPU_AV    -1 /* needs to be 1st CPU - 1         */
+#define CPU_NEXT  -2 /* arbitrary but must be < CPU_AV  */
+
 #define NET_SPD_PPP	56
 #define NET_SPD_ETH	100
 
@@ -104,7 +108,8 @@
 int update_mem();
 int update_net();
 int update_file();
-int change_cpu(int);
+void change_cpu(int);
+int more_cpus();
 void change_flame(int);
 GdkCursor *setup_cursor();
 void burn_spot(int, int, int);
@@ -130,8 +135,7 @@
 
 int monitor = FIRE_CPU;
 int load = 100;
-int cpu_av = 1;
-int cpu_id = 0;
+int cpu_id = CPU_AV; /* wbk - special value instead of separate flag */
 int cpu_nice = 1;
 char net_dev[16] = "ppp0";
 int net_spd = 0;
@@ -224,8 +228,15 @@
 			next = 0;
 			
 			if (!lock) {
-				if (monitor == FIRE_CPU && change_cpu(-1))
-					monitor = FIRE_MEM;
+				if (monitor == FIRE_CPU)
+        {
+          /* First, check if we have more CPU's to monitor. If none,  *
+           * move along to FIRE_MEM. Regardless, after this check, we *
+           * call change_cpu() to increment or reset CPU number.      */
+          if (!more_cpus()) 
+            monitor = FIRE_MEM; 
+          change_cpu(CPU_NEXT);
+        }
 				else if (monitor == FIRE_MEM)
 					monitor = FIRE_NET;
 				else if (monitor == FIRE_NET)
@@ -285,7 +296,7 @@
 
 	glibtop_get_cpu(&cpu);
 
-	if (cpu_av) {
+	if (cpu_id == CPU_AV) {
 		if (cpu_nice)
 			load = cpu.user + cpu.nice + cpu.sys;
 		else
@@ -383,30 +394,46 @@
 /* Change CPU monitor                     */
 /******************************************/
 
-int
+void
 change_cpu(int which)
 {
-	glibtop_cpu cpu;
+  /* wbk 20120221 - Changed return type to void. Use more_cpus()  *
+   * for tests instead. Mixing test logic with changing the CPU   *
+   * was causing CPU's to be skipped in calling function.         */
 
+  /* wbk - Even though we never use the cpu struct, I think this  *
+   * call may be necessary to set up glibtop_global_server?       */
+	glibtop_cpu cpu;
 	glibtop_get_cpu(&cpu);
 
 	/* This should work, but I have a lonely uniprocessor system */
+  /* wbk - tested with a quad core.                            */
 
-	if (which >= 0) {
+	if (which != CPU_NEXT) /* was run with command-line CPU specifier */
 		cpu_id = which;
-		cpu_av = 0;
-	} else {
-		cpu_id++;
-		cpu_av = 0;
-	}
+  else                   /* negative value "special case" for which */
+    cpu_id++; 
 
-	if (cpu_id >= glibtop_global_server->ncpu || cpu_id >= GLIBTOP_NCPU) {
-		cpu_id = 0;
-		cpu_av = 1;
-		return 1;
-	}
+  /* Since we already incremented cpu_id, we are comparing a        *
+   * 1-index with 0-index value essentially. But since GLIBTOP_NCPU *
+   * is 1-indexed, keep >= for it. (a bit of an oversimplification: *
+   * cpu_id is still definitely regarded as 0-indexed elsewhere. We *
+   * index an array with it later, so this is important)            */
+	if (cpu_id > glibtop_global_server->ncpu || cpu_id >= GLIBTOP_NCPU) 
+		cpu_id = CPU_AV;
 	
-	return 0;
+	return;
+}
+
+int 
+more_cpus()
+{
+  /* returns positive if next CPU would be valid, Negative if       *
+   * already monitoring highest-numbered CPU or if more cores than  *
+   * glibtop supports.                                              */
+  int next_cpu = cpu_id + 1;
+  return !(next_cpu > glibtop_global_server->ncpu
+            || next_cpu >= GLIBTOP_NCPU);
 }
 
 /******************************************/
@@ -494,7 +521,7 @@
 		if (proximity++ > 100) {
 
 			if (monitor == FIRE_CPU) {
-				if (cpu_av) {
+        if (cpu_id == CPU_AV) {
 					/* Horizontal bar for average cpu */
 					memset(&bm.cmap[27 * XMAX + 20], 255, 16);
 					memset(&bm.cmap[28 * XMAX + 20], 255, 16);