void service_uevq(void) { int empty; struct uevent *uev; do { pthread_mutex_lock(uevq_lockp); empty = (uevqhp == NULL); if (!empty) { uev = uevqhp; uevqhp = uev->next; if (uevqtp == uev) uevqtp = uev->next; pthread_mutex_unlock(uevq_lockp); if (my_uev_trigger && my_uev_trigger(uev, my_trigger_data)) condlog(0, "uevent trigger error"); FREE(uev); } else { pthread_mutex_unlock(uevq_lockp); } } while (empty == 0); }
/* * Called with uevq_lockp held */ void service_uevq(struct list_head *tmpq) { struct uevent *uev, *tmp; list_for_each_entry_safe(uev, tmp, tmpq, node) { list_del_init(&uev->node); if (my_uev_trigger && my_uev_trigger(uev, my_trigger_data)) condlog(0, "uevent trigger error"); FREE(uev); }