summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2007-05-08 21:50:46 +0000
committerjhb <jhb@FreeBSD.org>2007-05-08 21:50:46 +0000
commit86f8e9262ca3de6030e897ec1138a07a24a33b44 (patch)
tree605106ae37c89e9f05352e7ddc3b4088777c34e4 /sys/kern
parentb5754be873ffc482e02f0ca0302ed02455308b6e (diff)
downloadFreeBSD-src-86f8e9262ca3de6030e897ec1138a07a24a33b44.zip
FreeBSD-src-86f8e9262ca3de6030e897ec1138a07a24a33b44.tar.gz
Teach 'show lock' to properly handle a destroyed mutex.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_mutex.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c
index 34f0509..e088802 100644
--- a/sys/kern/kern_mutex.c
+++ b/sys/kern/kern_mutex.c
@@ -90,6 +90,8 @@ __FBSDID("$FreeBSD$");
*/
#define mtx_unowned(m) ((m)->mtx_lock == MTX_UNOWNED)
+#define mtx_destroyed(m) ((m)->mtx_lock == MTX_DESTROYED)
+
#define mtx_owner(m) ((struct thread *)((m)->mtx_lock & ~MTX_FLAGMASK))
#ifdef DDB
@@ -790,6 +792,8 @@ db_show_mtx(struct lock_object *lock)
db_printf(" state: {");
if (mtx_unowned(m))
db_printf("UNOWNED");
+ else if (mtx_destroyed(m))
+ db_printf("DESTROYED");
else {
db_printf("OWNED");
if (m->mtx_lock & MTX_CONTESTED)
@@ -798,7 +802,7 @@ db_show_mtx(struct lock_object *lock)
db_printf(", RECURSED");
}
db_printf("}\n");
- if (!mtx_unowned(m)) {
+ if (!mtx_unowned(m) && !mtx_destroyed(m)) {
td = mtx_owner(m);
db_printf(" owner: %p (tid %d, pid %d, \"%s\")\n", td,
td->td_tid, td->td_proc->p_pid, td->td_proc->p_comm);
OpenPOWER on IntegriCloud