Lines Matching defs:tq

63 iu_tq_destroy(iu_tq_t *tq)
67 for (node = tq->iutq_head; node != NULL; node = next_node) {
69 destroy_timer(tq, node);
72 free(tq);
76 * insert_timer(): inserts a timer node into a tq's timer list
85 insert_timer(iu_tq_t *tq, iu_timer_node_t *node, uint64_t msec)
100 if (tq->iutq_head != NULL &&
101 tq->iutq_head->iutn_abs_timeout < node->iutn_abs_timeout)
102 for (after = tq->iutq_head; after->iutn_next != NULL;
108 node->iutn_next = after ? after->iutn_next : tq->iutq_head;
111 tq->iutq_head = node;
120 * remove_timer(): removes a timer node from the tq's timer list
128 remove_timer(iu_tq_t *tq, iu_timer_node_t *node)
135 tq->iutq_head = node->iutn_next;
147 destroy_timer(iu_tq_t *tq, iu_timer_node_t *node)
149 release_timer_id(tq, node->iutn_timer_id);
156 if (tq->iutq_in_expire) {
166 * iu_schedule_timer(): creates and inserts a timer in the tq's timer list
176 iu_schedule_timer(iu_tq_t *tq, uint32_t sec, iu_tq_callback_t *callback,
179 return (iu_schedule_timer_ms(tq, sec * MILLISEC, callback, arg));
183 * iu_schedule_ms_timer(): creates and inserts a timer in the tq's timer list,
193 iu_schedule_timer_ms(iu_tq_t *tq, uint64_t ms, iu_tq_callback_t *callback,
203 node->iutn_timer_id = get_timer_id(tq);
209 insert_timer(tq, node, ms);
225 iu_cancel_timer(iu_tq_t *tq, iu_timer_id_t timer_id, void **arg)
232 for (node = tq->iutq_head; node != NULL; node = node->iutn_next) {
236 remove_timer(tq, node);
237 destroy_timer(tq, node);
245 * iu_adjust_timer(): adjusts the fire time of a timer in the tq's timer list
254 iu_adjust_timer(iu_tq_t *tq, iu_timer_id_t timer_id, uint32_t sec)
261 for (node = tq->iutq_head; node != NULL; node = node->iutn_next) {
263 remove_timer(tq, node);
264 insert_timer(tq, node, sec * MILLISEC);
272 * iu_earliest_timer(): returns the time until the next timer fires on a tq
280 iu_earliest_timer(iu_tq_t *tq)
285 if (tq->iutq_head == NULL)
293 if (tq->iutq_head->iutn_abs_timeout <= current_time)
302 (tq->iutq_head->iutn_abs_timeout - current_time) / 1000000;
315 iu_expire_timers(iu_tq_t *tq)
327 tq->iutq_in_expire++;
336 for (node = tq->iutq_head; node != NULL; node = node->iutn_next)
339 for (node = tq->iutq_head; node != NULL;
370 remove_timer(tq, node);
371 destroy_timer(tq, node);
372 node->iutn_callback(tq, node->iutn_arg);
375 tq->iutq_in_expire--;
400 get_timer_id(iu_tq_t *tq)
406 for (; ; tq->iutq_next_timer_id++) {
408 if (tq->iutq_next_timer_id >= IU_TIMER_ID_MAX) {
413 tq->iutq_next_timer_id = 0;
416 map_index = tq->iutq_next_timer_id / CHAR_BIT;
417 map_bit = tq->iutq_next_timer_id % CHAR_BIT;
419 if ((tq->iutq_timer_id_map[map_index] & (1 << map_bit)) == 0)
423 tq->iutq_timer_id_map[map_index] |= (1 << map_bit);
424 return (tq->iutq_next_timer_id++);
436 release_timer_id(iu_tq_t *tq, iu_timer_id_t timer_id)
441 tq->iutq_timer_id_map[map_index] &= ~(1 << map_bit);