Mark cv_wait mutex as locked before doing any further dances.
Fixes a LOCKDEBUG panic in case the uncommon condition is hit.
This commit is contained in:
parent
6dcf83c49c
commit
49bc93eb11
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: locks.c,v 1.51 2011/03/08 12:39:29 pooka Exp $ */
|
/* $NetBSD: locks.c,v 1.52 2011/03/09 18:15:39 pooka Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2007, 2008 Antti Kantee. All Rights Reserved.
|
* Copyright (c) 2007, 2008 Antti Kantee. All Rights Reserved.
|
||||||
|
@ -29,7 +29,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: locks.c,v 1.51 2011/03/08 12:39:29 pooka Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: locks.c,v 1.52 2011/03/09 18:15:39 pooka Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/kmem.h>
|
#include <sys/kmem.h>
|
||||||
|
@ -305,6 +305,8 @@ docvwait(kcondvar_t *cv, kmutex_t *mtx, struct timespec *ts)
|
||||||
rumpuser_cv_wait(RUMPCV(cv), RUMPMTX(mtx));
|
rumpuser_cv_wait(RUMPCV(cv), RUMPMTX(mtx));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOCKED(mtx, false);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check for QEXIT. if so, we need to wait here until we
|
* Check for QEXIT. if so, we need to wait here until we
|
||||||
* are allowed to exit.
|
* are allowed to exit.
|
||||||
|
@ -330,8 +332,6 @@ docvwait(kcondvar_t *cv, kmutex_t *mtx, struct timespec *ts)
|
||||||
}
|
}
|
||||||
l->l_private = NULL;
|
l->l_private = NULL;
|
||||||
|
|
||||||
LOCKED(mtx, false);
|
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue