Fix numerous bigs in the FreeBSD backend

* Correct calculation of CPU time.
* Fix a bug on newer versions of FreeBSD where computing the process map leads
to a tight error loop.
* Add support for the new procstat API to obtain the list of open files and
cwd.
* Use kvm_openfiles instead of kvm_open to better handle error messages.
* Split some modules out into non-suid modules.
* Properly determine the number of CPUs.

https://bugzilla.gnome.org/show_bug.cgi?id=605431
This commit is contained in:
Joe Marcus Clarke
2011-06-27 16:32:20 +02:00
committed by Jasper Lievisse Adriaanse
parent aa1a6766f2
commit 08fd95d253
10 changed files with 201 additions and 86 deletions

View File

@@ -85,7 +85,9 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
char tagstr[12];
struct inode inode;
struct cdev_priv priv;
#if __FreeBSD_version < 800039
struct cdev si;
#endif
*inum = 0;
*dev = 0;
@@ -111,18 +113,18 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, struct vnode *vnode,
return;
}
if (kvm_read (server->machine.kd, (gulong) inode.i_dev, (char *) &si,
sizeof (si)) != sizeof (si) ||
#if __FreeBSD_version >= 800039
kvm_read (server->machine.kd, (gulong) cdev2priv(&si), (char *) &priv,
if (kvm_read (server->machine.kd, (gulong) cdev2priv(inode.i_dev), (char *) &priv,
sizeof (priv))
#else
if (kvm_read (server->machine.kd, (gulong) inode.i_dev, (char *) &si,
sizeof (si)) != sizeof (si) ||
kvm_read (server->machine.kd, (gulong) si.si_priv, (char *) &priv,
sizeof (priv))
#endif
!= sizeof (priv))
{
glibtop_warn_io_r (server, "kvm_read (si)");
glibtop_warn_io_r (server, "kvm_read (priv)");
return;
}