| 103 | } |
| 104 | |
| 105 | void timer_addrel(struct timers *timers, struct timer *t, struct timerel rel) |
| 106 | { |
| 107 | assert(list_node_initted(&t->list)); |
| 108 | |
| 109 | t->time = time_to_grains(timemono_add(time_mono(), rel)); |
| 110 | |
| 111 | /* Added in the past? Treat it as imminent. */ |
| 112 | if (t->time < timers->base) |
| 113 | t->time = timers->base; |
| 114 | |
| 115 | if (t->time < timers->first) |
| 116 | timers->first = t->time; |
| 117 | |
| 118 | timer_add_raw(timers, t); |
| 119 | } |
| 120 | |
| 121 | void timer_addmono(struct timers *timers, struct timer *t, struct timemono when) |
| 122 | { |