mirror of
https://github.com/opnsense/src.git
synced 2026-05-26 03:08:23 -04:00
- Add an assertion to panic if one tries to call mtx_trylock() on a spin
mutex. - Don't panic if a spin lock is held too long inside _mtx_lock_spin() if panicstr is set (meaning that we are already in a panic). Just keep spinning forever instead.
This commit is contained in:
parent
83de502d59
commit
83cece6fa1
1 changed files with 4 additions and 1 deletions
|
|
@ -407,6 +407,9 @@ _mtx_trylock(struct mtx *m, int opts, const char *file, int line)
|
|||
int rval;
|
||||
|
||||
MPASS(curthread != NULL);
|
||||
KASSERT(m->mtx_object.lo_class == &lock_class_mtx_sleep,
|
||||
("mtx_trylock() of spin mutex %s @ %s:%d", m->mtx_object.lo_name,
|
||||
file, line));
|
||||
|
||||
if (mtx_owned(m) && (m->mtx_object.lo_flags & LO_RECURSABLE) != 0) {
|
||||
m->mtx_recurse++;
|
||||
|
|
@ -594,7 +597,7 @@ _mtx_lock_spin(struct mtx *m, uintptr_t tid, int opts, const char *file,
|
|||
}
|
||||
if (i < 60000000)
|
||||
DELAY(1);
|
||||
else if (!kdb_active) {
|
||||
else if (!kdb_active && !panicstr) {
|
||||
printf("spin lock %s held by %p for > 5 seconds\n",
|
||||
m->mtx_object.lo_name, (void *)m->mtx_lock);
|
||||
#ifdef WITNESS
|
||||
|
|
|
|||
Loading…
Reference in a new issue