diff options
author | rwatson <rwatson@FreeBSD.org> | 2004-01-08 22:49:23 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2004-01-08 22:49:23 +0000 |
commit | e73ac85912aa7bf1a141b56b00f9a99a50d2eec1 (patch) | |
tree | 6105c0626c575b0e541f2a5b20710dd7675bfd4a /sys/kern | |
parent | befa7a41a2066d28b744f83557cdec32fe3fe9f2 (diff) | |
download | FreeBSD-src-e73ac85912aa7bf1a141b56b00f9a99a50d2eec1.zip FreeBSD-src-e73ac85912aa7bf1a141b56b00f9a99a50d2eec1.tar.gz |
Improve the expressiveness of ttyinfo (^T) when dealing with threads
in slightly less usual states:
If the thread is on a run queue, display "running" if the thread is
actually running, otherwise, "runnable".
If the thread is sleeping, and it's on a sleep queue, display the
name of the queue, otherwise "unknown" -- previously, in this situation
we would display "iowait".
If the thread is waiting on a lock, display *lockname.
If the thread is suspended, display "suspended" -- previously, in
this situation we would display "iowait".
If the thread is waiting for an interrupt, display "intrwait" --
previously, in this situation we would display "iowait".
If the thread is in a state not handled by the above, display
"unknown" -- previously, we would print "iowait".
Among other things, this avoids displaying "iowait" when the foreground
process turns out to be suspended waiting for a debugger to properly
attach.
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/tty.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/sys/kern/tty.c b/sys/kern/tty.c index f34858c..5864817 100644 --- a/sys/kern/tty.c +++ b/sys/kern/tty.c @@ -2422,17 +2422,26 @@ ttyinfo(struct tty *tp) if (pick->p_flag & P_SA) { stmp = "KSE" ; /* XXXKSE */ } else { - if (td) { - if (TD_ON_RUNQ(td) || - (TD_IS_RUNNING(td))) { - stmp = "running"; + if (td != NULL) { + if (TD_ON_RUNQ(td)) { + if (TD_IS_RUNNING(td)) + stmp = "running"; + else + stmp = "runnable"; + } else if (TD_IS_SLEEPING(td)) { + if (TD_ON_SLEEPQ(td)) + stmp = td->td_wmesg; + else + stmp = "unknown"; } else if (TD_ON_LOCK(td)) { stmp = td->td_lockname; sprefix = "*"; - } else if (td->td_wmesg) { - stmp = td->td_wmesg; + } else if (TD_IS_SUSPENDED(td)) { + stmp = "suspended"; + } else if (TD_AWAITING_INTR(td)) { + stmp = "intrwait"; } else { - stmp = "iowait"; + stmp = "unknown"; } } else { stmp = "threadless"; |