diff options
author | Angelos D. Keromytis <angelos@cvs.openbsd.org> | 2001-06-03 06:46:48 +0000 |
---|---|---|
committer | Angelos D. Keromytis <angelos@cvs.openbsd.org> | 2001-06-03 06:46:48 +0000 |
commit | 51d300672358aa44ce92a29fd1d1377399f04979 (patch) | |
tree | e8358567e288753a566c4fa3e405d27015fd9e01 | |
parent | 77392538f354d25a630e54329f54ec05be2159a1 (diff) |
Use KERN_NPROCS to get the number of processes on the system, to
determine the amount of space we'll need to store the
information. The alternative, calling sysctl() with a NULL argument
for data, meant the kernel had to go through the process table.
-rw-r--r-- | usr.bin/top/machine.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c index a10f505bef8..a15ec570f29 100644 --- a/usr.bin/top/machine.c +++ b/usr.bin/top/machine.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machine.c,v 1.23 2001/02/22 03:10:24 deraadt Exp $ */ +/* $OpenBSD: machine.c,v 1.24 2001/06/03 06:46:47 angelos Exp $ */ /* * top - a top users display for Unix @@ -274,18 +274,20 @@ getprocs(op, arg, cnt) int op, arg; int *cnt; { - size_t size = 0; + size_t size = sizeof(int); int mib[4] = {CTL_KERN, KERN_PROC, op, arg}; - int st, nprocs; + int smib[2] = {CTL_KERN, KERN_NPROCS}; static struct kinfo_proc *procbase; + int st; - st = sysctl(mib, 4, NULL, &size, NULL, 0); + st = sysctl(smib, 2, cnt, &size, NULL, 0); if (st == -1) { /* _kvm_syserr(kd, kd->program, "kvm_getprocs"); */ return (0); } if (procbase) free(procbase); + size = (6 * (*cnt) * sizeof(struct kinfo_proc)) / 5; procbase = (struct kinfo_proc *)malloc(size); if (procbase == NULL) return (0); @@ -300,7 +302,6 @@ getprocs(op, arg, cnt) size, sizeof(struct kinfo_proc)); */ return (0); } - *cnt = size / sizeof(struct kinfo_proc); return (procbase); } |