diff options
| author | John Baldwin <jhb@FreeBSD.org> | 2011-07-18 17:33:08 +0000 |
|---|---|---|
| committer | John Baldwin <jhb@FreeBSD.org> | 2011-07-18 17:33:08 +0000 |
| commit | 2417d97ebb68bd397e2efd2aaca22fcb004d259a (patch) | |
| tree | c9ca0ce831e01fabc0898005bf23fb41dcc1c5e9 /usr.bin/top | |
| parent | 521ea19d1c941786d4b7feeff7ff5352336d4f64 (diff) | |
Notes
Diffstat (limited to 'usr.bin/top')
| -rw-r--r-- | usr.bin/top/machine.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c index 02dc8472ad49d..1f8a002ba9fc1 100644 --- a/usr.bin/top/machine.c +++ b/usr.bin/top/machine.c @@ -235,6 +235,7 @@ static int *pcpu_cpu_states; static int compare_jid(const void *a, const void *b); static int compare_pid(const void *a, const void *b); +static int compare_tid(const void *a, const void *b); static const char *format_nice(const struct kinfo_proc *pp); static void getsysctl(const char *name, void *ptr, size_t len); static int swapmode(int *retavail, int *retfree); @@ -557,7 +558,7 @@ get_old_proc(struct kinfo_proc *pp) * cache it. */ oldpp = bsearch(&pp, previous_pref, previous_proc_count, - sizeof(*previous_pref), compare_pid); + sizeof(*previous_pref), ps.thread ? compare_tid : compare_pid); if (oldpp == NULL) { pp->ki_udata = NOPROC; return (NULL); @@ -652,7 +653,7 @@ get_process_info(struct system_info *si, struct process_select *sel, previous_pref[i] = &previous_procs[i]; bcopy(pbase, previous_procs, nproc * sizeof(*previous_procs)); qsort(previous_pref, nproc, sizeof(*previous_pref), - compare_pid); + ps.thread ? compare_tid : compare_pid); } previous_proc_count = nproc; @@ -1059,6 +1060,18 @@ compare_pid(const void *p1, const void *p2) return ((*pp1)->ki_pid - (*pp2)->ki_pid); } +static int +compare_tid(const void *p1, const void *p2) +{ + const struct kinfo_proc * const *pp1 = p1; + const struct kinfo_proc * const *pp2 = p2; + + if ((*pp2)->ki_tid < 0 || (*pp1)->ki_tid < 0) + abort(); + + return ((*pp1)->ki_tid - (*pp2)->ki_tid); +} + /* * proc_compare - comparison function for "qsort" * Compares the resource consumption of two processes using five |
