X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftimer%2Ftimer.h;h=e678f7f7dfcbf78274e89ecbefcdc8e320992f0b;hb=b7cb7dfdf27243696183698b2f82522003cc1216;hp=aeb2aebc5dacb0396fe5ce319c4668812acb9df9;hpb=fe6bc8c530795a6c718f7e8fd1a6643d9f3024a1;p=ccan diff --git a/ccan/timer/timer.h b/ccan/timer/timer.h index aeb2aebc..e678f7f7 100644 --- a/ccan/timer/timer.h +++ b/ccan/timer/timer.h @@ -44,29 +44,40 @@ void timers_init(struct timers *timers, struct timeabs start); */ void timers_cleanup(struct timers *timers); +/** + * timer_init - initialize a timer. + * @timer: the timer to initialize + * + * Example: + * struct timer t; + * + * timer_init(&t); + */ +void timer_init(struct timer *t); + /** * timer_add - insert a timer. * @timers: the struct timers - * @timer: the (uninitialized) timer to add + * @timer: the (initialized or timer_del'd) timer to add * @when: when @timer expires. * * This efficiently adds @timer to @timers, to expire @when (rounded to * TIMER_GRANULARITY nanoseconds). * * Example: - * struct timer t; - * * // Timeout in 100ms. * timer_add(&timeouts, &t, timeabs_add(time_now(), time_from_msec(100))); */ void timer_add(struct timers *timers, struct timer *timer, struct timeabs when); /** - * timer_del - remove an unexpired timer. + * timer_del - remove a timer. * @timers: the struct timers - * @timer: the timer previously added with timer_add() + * @timer: the timer * - * This efficiently removes @timer from @timers. + * This efficiently removes @timer from @timers, if timer_add() was + * called. It can be called multiple times without bad effect, and + * can be called any time after timer_init(). * * Example: * timer_del(&timeouts, &t); @@ -154,8 +165,12 @@ void timers_dump(const struct timers *timers, FILE *fp); struct timers { /* Far in the future. */ struct list_head far; + /* Current time. */ uint64_t base; + /* Overall first value. */ uint64_t first; + /* First value in each level (plus 1 for far list) */ + uint64_t firsts[(64 + TIMER_LEVEL_BITS-1) / TIMER_LEVEL_BITS + 1]; struct timer_level *level[(64 + TIMER_LEVEL_BITS-1) / TIMER_LEVEL_BITS]; };