

struct timer *timer_next = NULL;/* timer we expect to run down next */
TIME time_timer_set;            /* time when physical timer was set */

void timers_update();           /* see discussion below */

void
timer_undeclare(t)
struct timer *t;
{
        disable_interrupts();
        if (!t->inuse) return;
        t->inuse = FALSE;

        /* check if we were waiting on this one */
        if (t == timer_next) {
                timers_update(time_now - time_timer_set);
                if (timer_next) {
                        start_physical_timer(timer_next->time);
                        time_timer_set = time_now;
                }
        }
        enable_interrupts();
}

Listing 3

