ports/60381: [patch] x11/kdebase3: fix various processlist-issues of ksysguardd
Markus Brueffer
brueffer at phoenix-systems.de
Fri Dec 19 01:40:32 UTC 2003
>Number: 60381
>Category: ports
>Synopsis: [patch] x11/kdebase3: fix various processlist-issues of ksysguardd
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Dec 18 17:40:18 PST 2003
>Closed-Date:
>Last-Modified:
>Originator: Markus Brueffer
>Release: FreeBSD 5.1-CURRENT i386
>Organization:
>Environment:
System: FreeBSD cheops.phoenix 5.1-CURRENT FreeBSD 5.1-CURRENT #11: Thu Nov 13 12:26:36 CET 2003 brueffer at cheops.phoenix:/usr/obj/usr/src/sys/CHEOPS i386
>Description:
x11/kdebase3: fix various processlist-issues of ksysguardd:
- Processlist doesn't show correct User CPU values
- -STABLE: Processlist doesn't show correct Vm-Size values.
- -CURRENT: Processlist doesn't show correct VmRss values
- -CURRENT: Processlist shows wrong process names:
http://www.brueffer.de/ksysguard/processlist1.png
http://www.brueffer.de/ksysguard/processlist2.png
>How-To-Repeat:
>Fix:
--- kdebase3.diff begins here ---
diff -ruN kdebase3.orig/files/patch-ksysguard-ksysguardd-FreeBSD-ProcessList.c kdebase3/files/patch-ksysguard-ksysguardd-FreeBSD-ProcessList.c
--- kdebase3.orig/files/patch-ksysguard-ksysguardd-FreeBSD-ProcessList.c Fri Dec 19 01:58:56 2003
+++ kdebase3/files/patch-ksysguard-ksysguardd-FreeBSD-ProcessList.c Fri Dec 19 01:59:21 2003
@@ -1,6 +1,15 @@
---- ksysguard/ksysguardd/FreeBSD/ProcessList.c Wed May 7 07:44:17 2003
-+++ ksysguard/ksysguardd/FreeBSD/ProcessList.c Wed Aug 27 18:51:18 2003
-@@ -168,6 +168,8 @@
+--- ksysguard/ksysguardd/FreeBSD/ProcessList.c.orig Wed May 7 13:44:17 2003
++++ ksysguard/ksysguardd/FreeBSD/ProcessList.c Mon Dec 15 03:38:38 2003
+@@ -46,6 +46,8 @@
+
+ CONTAINER ProcessList = 0;
+
++int fscale;
++
+ #define BUFSIZE 1024
+
+ typedef struct
+@@ -168,6 +170,8 @@
int mib[4];
struct kinfo_proc p;
size_t len;
@@ -9,7 +18,31 @@
if ((ps = findProcessInList(pid)) == 0)
{
-@@ -239,10 +241,17 @@
+@@ -222,27 +226,35 @@
+ strncpy(ps->userName,pwent&&pwent->pw_name? pwent->pw_name:"????",sizeof(ps->userName));
+ ps->userName[sizeof(ps->userName)-1]='\0';
+
++ if (fscale == 0)
++ ps->userLoad = 0;
++ else
+ #if __FreeBSD_version >= 500015
+- ps->userLoad = p.ki_pctcpu / 100;
++ ps->userLoad = 100.0 * (double) p.ki_pctcpu / fscale;
+ ps->vmSize = p.ki_size;
+- ps->vmRss = p.ki_rssize;
++ ps->vmRss = p.ki_rssize * getpagesize();
+ strncpy(ps->name,p.ki_comm? p.ki_comm:"????",sizeof(ps->name));
+ strcpy(ps->status,(p.ki_stat>=1)&&(p.ki_stat<=5)? statuses[p.ki_stat-1]:"????");
+ #else
+- ps->userLoad = p.kp_proc.p_pctcpu / 100;
+- ps->vmSize = (p.kp_eproc.e_vm.vm_tsize +
+- p.kp_eproc.e_vm.vm_dsize +
+- p.kp_eproc.e_vm.vm_ssize) * getpagesize();
++ ps->userLoad = 100.0 * (double) p.kp_proc.p_pctcpu / fscale;
++ ps->vmSize = p.kp_eproc.e_vm.vm_map.size;
+ ps->vmRss = p.kp_eproc.e_vm.vm_rssize * getpagesize();
+ strncpy(ps->name,p.kp_proc.p_comm ? p.kp_proc.p_comm : "????", sizeof(ps->name));
+ strcpy(ps->status,(p.kp_proc.p_stat>=1)&&(p.kp_proc.p_stat<=5)? statuses[p.kp_proc.p_stat-1]:"????");
#endif
/* process command line */
@@ -27,7 +60,26 @@
+ if ((sysctl(mib, 4, buf, &buflen, 0, 0) == -1) || !buflen)
+ strcpy(ps->cmdline, "????");
+ else
-+ strncpy(ps->cmdline, buf, buflen - 1);
++ strncpy(ps->cmdline, buf, buflen);
return (0);
+ }
+@@ -280,6 +292,7 @@
+ void
+ initProcessList(struct SensorModul* sm)
+ {
++ size_t fscalelen;
+ ProcessList = new_ctnr();
+
+ registerMonitor("ps", "table", printProcessList, printProcessListInfo, sm);
+@@ -290,6 +303,10 @@
+ registerCommand("kill", killProcess);
+ registerCommand("setpriority", setPriority);
+ }
++
++ fscalelen = sizeof(fscale);
++ if (sysctlbyname("kern.fscale", &fscale, &fscalelen, NULL, 0) == -1)
++ fscale = 0;
+
+ updateProcessList();
}
--- kdebase3.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list