Lines Matching refs:timer

171 static void abort_elapsed(Timer *timer);
176 static void heap_insert(TimerHeap *heap, Timer *timer);
181 static void elapse_timer(Timer *timer);
241 void gwtimer_destroy(Timer *timer) in gwtimer_destroy() argument
245 if (timer == NULL) in gwtimer_destroy()
248 gwtimer_stop(timer); in gwtimer_destroy()
249 gwlist_remove_producer(timer->output); in gwtimer_destroy()
250 wap_event_destroy(timer->event); in gwtimer_destroy()
251 gw_free(timer); in gwtimer_destroy()
254 void gwtimer_start(Timer *timer, int interval, WAPEvent *event) in gwtimer_start() argument
259 gw_assert(timer != NULL); in gwtimer_start()
260 gw_assert(event != NULL || timer->event != NULL); in gwtimer_start()
267 if (timer->elapses > 0) { in gwtimer_start()
270 if (interval < timer->elapses && timer->index == 0) in gwtimer_start()
272 timer->elapses = interval; in gwtimer_start()
273 gw_assert(timers->heap->tab[timer->index] == timer); in gwtimer_start()
274 wakeup |= heap_adjust(timers->heap, timer->index); in gwtimer_start()
279 abort_elapsed(timer); in gwtimer_start()
282 timer->elapses = interval; in gwtimer_start()
283 gw_assert(timer->index < 0); in gwtimer_start()
284 heap_insert(timers->heap, timer); in gwtimer_start()
285 wakeup = timer->index == 0; /* Do we have a new top? */ in gwtimer_start()
289 wap_event_destroy(timer->event); in gwtimer_start()
290 timer->event = event; in gwtimer_start()
299 void gwtimer_stop(Timer *timer) in gwtimer_stop() argument
302 gw_assert(timer != NULL); in gwtimer_stop()
309 if (timer->elapses > 0) { in gwtimer_stop()
310 timer->elapses = -1; in gwtimer_stop()
311 gw_assert(timers->heap->tab[timer->index] == timer); in gwtimer_stop()
312 heap_delete(timers->heap, timer->index); in gwtimer_stop()
315 abort_elapsed(timer); in gwtimer_stop()
338 static void abort_elapsed(Timer *timer) in abort_elapsed() argument
342 if (timer->elapsed_event == NULL) in abort_elapsed()
345 count = gwlist_delete_equal(timer->output, timer->elapsed_event); in abort_elapsed()
348 wap_event_name(timer->elapsed_event->type)); in abort_elapsed()
349 wap_event_destroy(timer->elapsed_event); in abort_elapsed()
351 timer->elapsed_event = NULL; in abort_elapsed()
403 static void heap_insert(TimerHeap *heap, Timer *timer) in heap_insert() argument
411 heap->tab[heap->len - 1] = timer; in heap_insert()
412 timer->index = heap->len - 1; in heap_insert()
413 heap_adjust(heap, timer->index); in heap_insert()
514 static void elapse_timer(Timer *timer) in elapse_timer() argument
516 gw_assert(timer != NULL); in elapse_timer()
520 gw_assert(timer->elapsed_event == NULL); in elapse_timer()
522 debug("timers", 0, "%s elapsed.", wap_event_name(timer->event->type)); in elapse_timer()
524 timer->elapsed_event = wap_event_duplicate(timer->event); in elapse_timer()
525 gwlist_produce(timer->output, timer->elapsed_event); in elapse_timer()
526 timer->elapses = -1; in elapse_timer()