timer_InitService();
timer_Start(struct pppTimer * tp){  struct pppTimer *t, *pt;  u_long ticks = 0;  int omask;  omask = sigblock(sigmask(SIGALRM));  if (tp->state != TIMER_STOPPED)    StopTimerNoBlock(tp);  if (tp->load == 0) {    log_Printf(LogTIMER, "%s timer[%p] has 0 load!\n", tp->name, tp);    sigsetmask(omask);    return;  }  pt = NULL;  for (t = TimerList; t; t = t->next) {    if (ticks + t->rest >= tp->load)      break;    ticks += t->rest;    pt = t;  }  tp->state = TIMER_RUNNING;  tp->rest = tp->load - ticks;  if (t)    log_Printf(LogTIMER, "timer_Start: Inserting %s timer[%p] before %s "              "timer[%p], delta = %ld\n", tp->name, tp, t->name, t, tp->rest);  else    log_Printf(LogTIMER, "timer_Start: Inserting %s timer[%p]\n", tp->name, tp);  /* Insert given *tp just before *t */  tp->next = t;  if (pt) {    pt->next = tp;  } else {    timer_InitService();    TimerList = tp;  }  if (t)    t->rest -= tp->rest;  sigsetmask(omask);}