Lines Matching refs:timer
70 schedule(isc_timer_t *timer) { in schedule() argument
79 manager = timer->manager; in schedule()
84 due = timer->idle; in schedule()
90 if (timer->index > 0) { in schedule()
94 if (timespeccmp(&due, &timer->due, <)) in schedule()
95 isc_heap_increased(manager->heap, timer->index); in schedule()
96 else if (timespeccmp(&due, &timer->due, >)) in schedule()
97 isc_heap_decreased(manager->heap, timer->index); in schedule()
99 timer->due = due; in schedule()
101 timer->due = due; in schedule()
102 result = isc_heap_insert(manager->heap, timer); in schedule()
116 if (timer->index == 1 && timespeccmp(&timer->due, &manager->due, <)) in schedule()
117 manager->due = timer->due; in schedule()
123 deschedule(isc_timer_t *timer) { in deschedule() argument
130 manager = timer->manager; in deschedule()
131 if (timer->index > 0) { in deschedule()
132 isc_heap_delete(manager->heap, timer->index); in deschedule()
133 timer->index = 0; in deschedule()
140 destroy(isc_timer_t *timer) { in destroy() argument
141 isc_timermgr_t *manager = timer->manager; in destroy()
147 (void)isc_task_purgerange(timer->task, in destroy()
148 timer, in destroy()
152 deschedule(timer); in destroy()
153 UNLINK(manager->timers, timer, link); in destroy()
155 isc_task_detach(&timer->task); in destroy()
156 free(timer); in destroy()
165 isc_timer_t *timer; in isc_timer_create() local
188 timer = malloc(sizeof(*timer)); in isc_timer_create()
189 if (timer == NULL) in isc_timer_create()
192 timer->manager = manager; in isc_timer_create()
193 timer->references = 1; in isc_timer_create()
196 timespecadd(&now, interval, &timer->idle); in isc_timer_create()
198 timer->interval = *interval; in isc_timer_create()
199 timer->task = NULL; in isc_timer_create()
200 isc_task_attach(task, &timer->task); in isc_timer_create()
201 timer->action = action; in isc_timer_create()
212 DE_CONST(arg, timer->arg); in isc_timer_create()
213 timer->index = 0; in isc_timer_create()
214 ISC_LINK_INIT(timer, link); in isc_timer_create()
216 result = schedule(timer); in isc_timer_create()
218 APPEND(manager->timers, timer, link); in isc_timer_create()
221 isc_task_detach(&timer->task); in isc_timer_create()
222 free(timer); in isc_timer_create()
226 *timerp = (isc_timer_t *)timer; in isc_timer_create()
232 isc_timer_reset(isc_timer_t *timer, const struct timespec *interval, in isc_timer_reset() argument
253 (void)isc_task_purgerange(timer->task, in isc_timer_reset()
254 timer, in isc_timer_reset()
258 timer->interval = *interval; in isc_timer_reset()
260 timespecadd(&now, interval, &timer->idle); in isc_timer_reset()
262 timespecclear(&timer->idle); in isc_timer_reset()
265 result = schedule(timer); in isc_timer_reset()
271 isc_timer_touch(isc_timer_t *timer) { in isc_timer_touch() argument
279 timespecadd(&now, &timer->interval, &timer->idle); in isc_timer_touch()
284 isc_timer_t *timer; in isc_timer_detach() local
292 timer = (isc_timer_t *)*timerp; in isc_timer_detach()
294 REQUIRE(timer->references > 0); in isc_timer_detach()
295 timer->references--; in isc_timer_detach()
296 if (timer->references == 0) in isc_timer_detach()
300 destroy(timer); in isc_timer_detach()
310 isc_timer_t *timer; in dispatch() local
319 timer = isc_heap_element(manager->heap, 1); in dispatch()
320 INSIST(timer != NULL); in dispatch()
321 if (timespeccmp(now, &timer->due, >=)) { in dispatch()
324 if (timespecisset(&timer->idle) && timespeccmp(now, in dispatch()
325 &timer->idle, >=)) { in dispatch()
346 timer, in dispatch()
348 timer->action, in dispatch()
349 timer->arg, in dispatch()
353 event->due = timer->due; in dispatch()
354 isc_task_send(timer->task, in dispatch()
361 timer->index = 0; in dispatch()
366 result = schedule(timer); in dispatch()
374 manager->due = timer->due; in dispatch()
394 isc_timer_t *timer; in set_index() local
396 timer = what; in set_index()
398 timer->index = index; in set_index()