Lines Matching refs:tq

60 iu_tq_destroy(iu_tq_t *tq)
64 for (node = tq->iutq_head; node != NULL; node = next_node) {
66 destroy_timer(tq, node);
69 free(tq);
73 * insert_timer(): inserts a timer node into a tq's timer list
82 insert_timer(iu_tq_t *tq, iu_timer_node_t *node, uint64_t msec)
97 if (tq->iutq_head != NULL &&
98 tq->iutq_head->iutn_abs_timeout < node->iutn_abs_timeout)
99 for (after = tq->iutq_head; after->iutn_next != NULL;
105 node->iutn_next = after ? after->iutn_next : tq->iutq_head;
108 tq->iutq_head = node;
117 * remove_timer(): removes a timer node from the tq's timer list
125 remove_timer(iu_tq_t *tq, iu_timer_node_t *node)
132 tq->iutq_head = node->iutn_next;
144 destroy_timer(iu_tq_t *tq, iu_timer_node_t *node)
146 release_timer_id(tq, node->iutn_timer_id);
153 if (tq->iutq_in_expire) {
155 node->iutn_next = tq->iutq_pending_delete_chain;
156 tq->iutq_pending_delete_chain = node;
163 * iu_schedule_timer(): creates and inserts a timer in the tq's timer list
173 iu_schedule_timer(iu_tq_t *tq, uint32_t sec, iu_tq_callback_t *callback,
176 return (iu_schedule_timer_ms(tq, sec * MILLISEC, callback, arg));
180 * iu_schedule_ms_timer(): creates and inserts a timer in the tq's timer list,
190 iu_schedule_timer_ms(iu_tq_t *tq, uint64_t ms, iu_tq_callback_t *callback,
200 node->iutn_timer_id = get_timer_id(tq);
206 insert_timer(tq, node, ms);
222 iu_cancel_timer(iu_tq_t *tq, iu_timer_id_t timer_id, void **arg)
229 for (node = tq->iutq_head; node != NULL; node = node->iutn_next) {
233 remove_timer(tq, node);
234 destroy_timer(tq, node);
242 * iu_adjust_timer(): adjusts the fire time of a timer in the tq's timer list
251 iu_adjust_timer(iu_tq_t *tq, iu_timer_id_t timer_id, uint32_t sec)
258 for (node = tq->iutq_head; node != NULL; node = node->iutn_next) {
260 remove_timer(tq, node);
261 insert_timer(tq, node, sec * MILLISEC);
269 * iu_earliest_timer(): returns the time until the next timer fires on a tq
277 iu_earliest_timer(iu_tq_t *tq)
282 if (tq->iutq_head == NULL)
290 if (tq->iutq_head->iutn_abs_timeout <= current_time)
299 (tq->iutq_head->iutn_abs_timeout - current_time) / 1000000;
312 iu_expire_timers(iu_tq_t *tq)
324 tq->iutq_in_expire++;
333 for (node = tq->iutq_head; node != NULL; node = node->iutn_next)
336 for (node = tq->iutq_head; node != NULL;
367 remove_timer(tq, node);
368 destroy_timer(tq, node);
369 node->iutn_callback(tq, node->iutn_arg);
372 tq->iutq_in_expire--;
380 for (node = tq->iutq_pending_delete_chain; node != NULL;
385 tq->iutq_pending_delete_chain = NULL;
398 get_timer_id(iu_tq_t *tq)
404 for (; ; tq->iutq_next_timer_id++) {
406 if (tq->iutq_next_timer_id >= IU_TIMER_ID_MAX) {
411 tq->iutq_next_timer_id = 0;
414 map_index = tq->iutq_next_timer_id / CHAR_BIT;
415 map_bit = tq->iutq_next_timer_id % CHAR_BIT;
417 if ((tq->iutq_timer_id_map[map_index] & (1 << map_bit)) == 0)
421 tq->iutq_timer_id_map[map_index] |= (1 << map_bit);
422 return (tq->iutq_next_timer_id++);
434 release_timer_id(iu_tq_t *tq, iu_timer_id_t timer_id)
439 tq->iutq_timer_id_map[map_index] &= ~(1 << map_bit);