From cb408d85e76131d8ac5262acf46420d22794ca11 Mon Sep 17 00:00:00 2001 From: alfred Date: Tue, 2 Apr 2002 04:18:54 +0000 Subject: Use sx locks rather than lockmgr locks for eventhandlers. Submitted by: Jonathan Mini --- sys/kern/subr_eventhandler.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'sys/kern/subr_eventhandler.c') diff --git a/sys/kern/subr_eventhandler.c b/sys/kern/subr_eventhandler.c index f02fb33..5cb2500 100644 --- a/sys/kern/subr_eventhandler.c +++ b/sys/kern/subr_eventhandler.c @@ -90,6 +90,7 @@ eventhandler_register(struct eventhandler_list *list, char *name, return(NULL); } list->el_flags = 0; + bzero(&list->el_lock, sizeof(list->el_lock)); list->el_name = (char *)list + sizeof(struct eventhandler_list); strcpy(list->el_name, name); TAILQ_INSERT_HEAD(&eventhandler_lists, list, el_link); @@ -97,7 +98,7 @@ eventhandler_register(struct eventhandler_list *list, char *name, } if (!(list->el_flags & EHE_INITTED)) { TAILQ_INIT(&list->el_entries); - lockinit(&list->el_lock, PZERO, name, 0, 0); + sx_init(&list->el_lock, name); list->el_flags = EHE_INITTED; } @@ -112,7 +113,7 @@ eventhandler_register(struct eventhandler_list *list, char *name, eg->ee.ee_priority = priority; /* sort it into the list */ - lockmgr(&list->el_lock, LK_EXCLUSIVE, NULL, curthread); + EHE_LOCK(list); for (ep = TAILQ_FIRST(&list->el_entries); ep != NULL; ep = TAILQ_NEXT(ep, ee_link)) { @@ -123,7 +124,7 @@ eventhandler_register(struct eventhandler_list *list, char *name, } if (ep == NULL) TAILQ_INSERT_TAIL(&list->el_entries, &eg->ee, ee_link); - lockmgr(&list->el_lock, LK_RELEASE, NULL, curthread); + EHE_UNLOCK(list); mtx_unlock(&eventhandler_mutex); return(&eg->ee); } @@ -134,7 +135,7 @@ eventhandler_deregister(struct eventhandler_list *list, eventhandler_tag tag) struct eventhandler_entry *ep = tag; /* XXX insert diagnostic check here? */ - lockmgr(&list->el_lock, LK_EXCLUSIVE, NULL, curthread); + EHE_LOCK(list); if (ep != NULL) { /* remove just this entry */ TAILQ_REMOVE(&list->el_entries, ep, ee_link); @@ -147,7 +148,7 @@ eventhandler_deregister(struct eventhandler_list *list, eventhandler_tag tag) free(ep, M_EVENTHANDLER); } } - lockmgr(&list->el_lock, LK_RELEASE, NULL, curthread); + EHE_UNLOCK(list); } struct eventhandler_list * -- cgit v1.1