From ccc65d15981eda4771db87b306a09131dd4a4a4a Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 7 May 2006 00:51:11 +0000 Subject: [PATCH] lockmgr_kernproc() wasn't checking whether the lockholder as already LK_KERNTHREAD, resulting in a panic in certain situations. Reported-by: Stefan Krueger --- sys/kern/kern_lock.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index 41cc757cfd..ab6e805e33 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -39,7 +39,7 @@ * * @(#)kern_lock.c 8.18 (Berkeley) 5/21/95 * $FreeBSD: src/sys/kern/kern_lock.c,v 1.31.2.3 2001/12/25 01:44:44 dillon Exp $ - * $DragonFly: src/sys/kern/kern_lock.c,v 1.19 2006/05/05 20:15:01 dillon Exp $ + * $DragonFly: src/sys/kern/kern_lock.c,v 1.20 2006/05/07 00:51:11 dillon Exp $ */ #include "opt_lint.h" @@ -438,9 +438,12 @@ lockmgr_kernproc(struct lock *lp) { struct thread *td = curthread; - KASSERT(lp->lk_lockholder == td, ("lockmgr_kernproc: lock not owned by curthread %p", td)); - COUNT(td, -1); - lp->lk_lockholder = LK_KERNTHREAD; + if (lp->lk_lockholder != LK_KERNTHREAD) { + KASSERT(lp->lk_lockholder == td, + ("lockmgr_kernproc: lock not owned by curthread %p", td)); + COUNT(td, -1); + lp->lk_lockholder = LK_KERNTHREAD; + } } /* -- 2.41.0