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