- Fix the situation where kern.smp.maxid > hw.ncpu by using the former value,
otherwise this would lead to insufficient space for the kern.cp_times sysctlbyname() call. [1] - Bump PORTREVISION Noticed/tested by: jilles
This commit is contained in:
parent
fa49e51566
commit
0a85f6c463
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=288348
@ -7,7 +7,7 @@
|
||||
|
||||
PORTNAME= xfce4-cpugraph-plugin
|
||||
PORTVERSION= 1.0.1
|
||||
PORTREVISION= 2
|
||||
PORTREVISION= 3
|
||||
CATEGORIES= sysutils xfce
|
||||
MASTER_SITES= ${MASTER_SITE_XFCE}
|
||||
MASTER_SITE_SUBDIR= src/panel-plugins/${PORTNAME}/${PORTVERSION:R}
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- panel-plugin/os.c.orig 2010-11-07 13:58:22.000000000 +0100
|
||||
+++ panel-plugin/os.c 2011-12-18 13:52:22.000000000 +0100
|
||||
@@ -134,28 +134,41 @@
|
||||
+++ panel-plugin/os.c 2011-12-31 17:30:16.000000000 +0100
|
||||
@@ -134,28 +134,54 @@
|
||||
#elif defined (__FreeBSD__)
|
||||
guint detect_cpu_number()
|
||||
{
|
||||
@ -18,24 +18,23 @@
|
||||
{
|
||||
glong used, total;
|
||||
- glong cp_time[CPUSTATES];
|
||||
+ glong cp_time[CPUSTATES * nb_cpu];
|
||||
- gsize len = sizeof( cp_time );
|
||||
+ glong *cp_time;
|
||||
+ glong *cp_time1;
|
||||
gsize len = sizeof( cp_time );
|
||||
+ gint i;
|
||||
+ unsigned int max_cpu;
|
||||
+ gsize len = sizeof(max_cpu);
|
||||
|
||||
- if( sysctlbyname( "kern.cp_time", &cp_time, &len, NULL, 0 ) < 0 )
|
||||
+ data[0].load = 0;
|
||||
+ if( sysctlbyname( "kern.cp_times", &cp_time, &len, NULL, 0 ) < 0 )
|
||||
+ if (sysctlbyname("kern.smp.maxid", &max_cpu, &len, NULL, 0) < 0)
|
||||
return FALSE;
|
||||
+ for (i = 1; i <= nb_cpu; i++ )
|
||||
+ {
|
||||
+ cp_time1 = cp_time + CPUSTATES * (i - 1);
|
||||
+ used = cp_time1[CP_USER] + cp_time1[CP_NICE] + cp_time1[CP_SYS] + cp_time1[CP_INTR];
|
||||
+ total = used + cp_time1[CP_IDLE];
|
||||
+ if( (total - data[i].previous_total) != 0 )
|
||||
+ data[i].load = (CPU_SCALE * (used - data[i].previous_used))/(total - data[i].previous_total);
|
||||
+ else
|
||||
+ data[i].load = 0;
|
||||
+
|
||||
+ max_cpu++; /* max_cpu is 0-based */
|
||||
+ if (max_cpu < nb_cpu)
|
||||
+ return FALSE; /* should not happen */
|
||||
+ len = sizeof(glong) * max_cpu * CPUSTATES;
|
||||
+ cp_time = (glong *) g_malloc(len);
|
||||
|
||||
- used = cp_time[CP_USER] + cp_time[CP_NICE] + cp_time[CP_SYS] + cp_time[CP_INTR];
|
||||
- total = used + cp_time[CP_IDLE];
|
||||
@ -46,12 +45,26 @@
|
||||
-
|
||||
- data[0].previous_used = used;
|
||||
- data[0].previous_total = total;
|
||||
-
|
||||
+ if (sysctlbyname( "kern.cp_times", cp_time, &len, NULL, 0 ) < 0) {
|
||||
+ g_free(cp_time);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ for (i = 1; i <= nb_cpu; i++ )
|
||||
+ {
|
||||
+ cp_time1 = &cp_time[CPUSTATES * (i - 1)];
|
||||
+ used = cp_time1[CP_USER] + cp_time1[CP_NICE] + cp_time1[CP_SYS] + cp_time1[CP_INTR];
|
||||
+ total = used + cp_time1[CP_IDLE];
|
||||
+ if( (total - data[i].previous_total) != 0 )
|
||||
+ data[i].load = (CPU_SCALE * (used - data[i].previous_used))/(total - data[i].previous_total);
|
||||
+ else
|
||||
+ data[i].load = 0;
|
||||
|
||||
+ data[i].previous_used = used;
|
||||
+ data[i].previous_total = total;
|
||||
+ data[0].load += data[i].load;
|
||||
+ }
|
||||
+ data[0].load /= nb_cpu;
|
||||
+ g_free(cp_time);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user