diff options
author | alfred <alfred@FreeBSD.org> | 2002-04-02 04:18:54 +0000 |
---|---|---|
committer | alfred <alfred@FreeBSD.org> | 2002-04-02 04:18:54 +0000 |
commit | cb408d85e76131d8ac5262acf46420d22794ca11 (patch) | |
tree | b808fbe52b573b678cf28d5b5d3c29c03897aa7a /sys/kern/subr_eventhandler.c | |
parent | ab6bb4225e38a33e34980df6d09894466928b3f1 (diff) | |
download | FreeBSD-src-cb408d85e76131d8ac5262acf46420d22794ca11.zip FreeBSD-src-cb408d85e76131d8ac5262acf46420d22794ca11.tar.gz |
Use sx locks rather than lockmgr locks for eventhandlers.
Submitted by: Jonathan Mini <mini@haikugeek.com>
Diffstat (limited to 'sys/kern/subr_eventhandler.c')
-rw-r--r-- | sys/kern/subr_eventhandler.c | 11 |
1 files changed, 6 insertions, 5 deletions
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 * |