summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2002-04-04 00:52:03 +0000
committeralfred <alfred@FreeBSD.org>2002-04-04 00:52:03 +0000
commit6dc270c501d56ffc60526f2af97d76db09f274ff (patch)
tree1710309d06c3aa019e844bfdd27ffe39a33b78e3 /sys
parent05b07d79e330ed63c030ec9f64c5883dd666c9c2 (diff)
downloadFreeBSD-src-6dc270c501d56ffc60526f2af97d76db09f274ff.zip
FreeBSD-src-6dc270c501d56ffc60526f2af97d76db09f274ff.tar.gz
Avoid a lock order reversal by dropping the eventhandler_mutex earlier.
We get enough protection from the lock on the individual lists that we aquire later. Noticed/Tested by: Steven G. Kargl <kargl@troutmask.apl.washington.edu> Submitted by: Jonathan Mini <mini@haikugeek.com>
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/subr_eventhandler.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/kern/subr_eventhandler.c b/sys/kern/subr_eventhandler.c
index 5cb2500..0a64ff1 100644
--- a/sys/kern/subr_eventhandler.c
+++ b/sys/kern/subr_eventhandler.c
@@ -101,11 +101,11 @@ eventhandler_register(struct eventhandler_list *list, char *name,
sx_init(&list->el_lock, name);
list->el_flags = EHE_INITTED;
}
+ mtx_unlock(&eventhandler_mutex);
/* allocate an entry for this handler, populate it */
if ((eg = malloc(sizeof(struct eventhandler_entry_generic),
M_EVENTHANDLER, M_NOWAIT)) == NULL) {
- mtx_unlock(&eventhandler_mutex);
return(NULL);
}
eg->func = func;
@@ -125,7 +125,6 @@ eventhandler_register(struct eventhandler_list *list, char *name,
if (ep == NULL)
TAILQ_INSERT_TAIL(&list->el_entries, &eg->ee, ee_link);
EHE_UNLOCK(list);
- mtx_unlock(&eventhandler_mutex);
return(&eg->ee);
}
OpenPOWER on IntegriCloud