Lines Matching full:list
11 * notice, this list of conditions and the following disclaimer.
13 * notice, this list of conditions and the following disclaimer in the
41 /* List of all eventhandler lists */
55 * Initialize the eventhandler mutex and list.
70 struct eventhandler_list *list, *new_list; in eventhandler_find_or_create_list() local
72 /* look for a matching, existing list */ in eventhandler_find_or_create_list()
73 list = _eventhandler_find_list(name); in eventhandler_find_or_create_list()
75 /* Do we need to create the list? */ in eventhandler_find_or_create_list()
76 if (list == NULL) { in eventhandler_find_or_create_list()
84 list = _eventhandler_find_list(name); in eventhandler_find_or_create_list()
85 if (list != NULL) { in eventhandler_find_or_create_list()
88 CTR2(KTR_EVH, "%s: creating list \"%s\"", __func__, name); in eventhandler_find_or_create_list()
89 list = new_list; in eventhandler_find_or_create_list()
90 TAILQ_INIT(&list->el_entries); in eventhandler_find_or_create_list()
91 list->el_name = (char *)(list + 1); in eventhandler_find_or_create_list()
92 strcpy(list->el_name, name); in eventhandler_find_or_create_list()
93 mtx_init(&list->el_lock, list->el_name, "eventhandler list", in eventhandler_find_or_create_list()
95 TAILQ_INSERT_HEAD(&eventhandler_lists, list, el_link); in eventhandler_find_or_create_list()
98 return (list); in eventhandler_find_or_create_list()
106 eventhandler_register_internal(struct eventhandler_list *list, in eventhandler_register_internal() argument
114 /* Do we need to find/create the list? */ in eventhandler_register_internal()
115 if (list == NULL) { in eventhandler_register_internal()
117 list = eventhandler_find_or_create_list(name); in eventhandler_register_internal()
124 /* sort it into the list */ in eventhandler_register_internal()
127 EHL_LOCK(list); in eventhandler_register_internal()
128 TAILQ_FOREACH(ep, &list->el_entries, ee_link) { in eventhandler_register_internal()
136 TAILQ_INSERT_TAIL(&list->el_entries, epn, ee_link); in eventhandler_register_internal()
137 EHL_UNLOCK(list); in eventhandler_register_internal()
142 eventhandler_register(struct eventhandler_list *list, const char *name, in eventhandler_register() argument
154 return (eventhandler_register_internal(list, name, &eg->ee)); in eventhandler_register()
166 vimage_eventhandler_register(struct eventhandler_list *list, const char *name, in vimage_eventhandler_register() argument
180 return (eventhandler_register_internal(list, name, &eg->ee)); in vimage_eventhandler_register()
185 _eventhandler_deregister(struct eventhandler_list *list, eventhandler_tag tag, in _eventhandler_deregister() argument
190 EHL_LOCK_ASSERT(list, MA_OWNED); in _eventhandler_deregister()
193 if (list->el_runcount == 0) { in _eventhandler_deregister()
195 list->el_name); in _eventhandler_deregister()
196 TAILQ_REMOVE(&list->el_entries, ep, ee_link); in _eventhandler_deregister()
200 ep, list->el_name); in _eventhandler_deregister()
204 /* remove entire list */ in _eventhandler_deregister()
205 if (list->el_runcount == 0) { in _eventhandler_deregister()
207 list->el_name); in _eventhandler_deregister()
208 while (!TAILQ_EMPTY(&list->el_entries)) { in _eventhandler_deregister()
209 ep = TAILQ_FIRST(&list->el_entries); in _eventhandler_deregister()
210 TAILQ_REMOVE(&list->el_entries, ep, ee_link); in _eventhandler_deregister()
215 __func__, list->el_name); in _eventhandler_deregister()
216 TAILQ_FOREACH(ep, &list->el_entries, ee_link) in _eventhandler_deregister()
220 while (wait && list->el_runcount > 0) in _eventhandler_deregister()
221 mtx_sleep(list, &list->el_lock, 0, "evhrm", 0); in _eventhandler_deregister()
222 EHL_UNLOCK(list); in _eventhandler_deregister()
226 eventhandler_deregister(struct eventhandler_list *list, eventhandler_tag tag) in eventhandler_deregister() argument
229 _eventhandler_deregister(list, tag, true); in eventhandler_deregister()
233 eventhandler_deregister_nowait(struct eventhandler_list *list, in eventhandler_deregister_nowait() argument
237 _eventhandler_deregister(list, tag, false); in eventhandler_deregister_nowait()
241 * Internal version for use when eventhandler list is already locked.
246 struct eventhandler_list *list; in _eventhandler_find_list() local
249 TAILQ_FOREACH(list, &eventhandler_lists, el_link) { in _eventhandler_find_list()
250 if (!strcmp(name, list->el_name)) in _eventhandler_find_list()
253 return (list); in _eventhandler_find_list()
257 * Lookup a "slow" list by name. Returns with the list locked.
262 struct eventhandler_list *list; in eventhandler_find_list() local
267 /* scan looking for the requested list */ in eventhandler_find_list()
269 list = _eventhandler_find_list(name); in eventhandler_find_list()
270 if (list != NULL) in eventhandler_find_list()
271 EHL_LOCK(list); in eventhandler_find_list()
274 return(list); in eventhandler_find_list()
278 * Prune "dead" entries from an eventhandler list.
281 eventhandler_prune_list(struct eventhandler_list *list) in eventhandler_prune_list() argument
286 CTR2(KTR_EVH, "%s: pruning list \"%s\"", __func__, list->el_name); in eventhandler_prune_list()
287 EHL_LOCK_ASSERT(list, MA_OWNED); in eventhandler_prune_list()
288 TAILQ_FOREACH_SAFE(ep, &list->el_entries, ee_link, en) { in eventhandler_prune_list()
290 TAILQ_REMOVE(&list->el_entries, ep, ee_link); in eventhandler_prune_list()
296 wakeup(list); in eventhandler_prune_list()
300 * Create (or get the existing) list so the pointer can be stored by
306 struct eventhandler_list *list; in eventhandler_create_list() local
309 ("eventhandler list created too early")); in eventhandler_create_list()
312 list = eventhandler_find_or_create_list(name); in eventhandler_create_list()
315 return (list); in eventhandler_create_list()