• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/mountd/timer.c

  1 #include <signal.h>
  2 #include <stdlib.h>
  3 #include <unistd.h>
  4 
  5 #include "include/log.h"
  6 #include "include/list.h"
  7 #include "include/timer.h"
  8 #include "include/ucix.h"
  9 
 10 /* when using this file, alarm() is used */
 11 
 12 static struct list_head timers;
 13 
 14 struct timer {
 15         struct list_head list;
 16         int count;
 17         int timeout;
 18         timercb_t timercb;
 19 };
 20 
 21 void timer_add(timercb_t timercb, int timeout)
 22 {
 23         struct timer *timer;
 24         timer = malloc(sizeof(struct timer));
 25         if(!timer)
 26         {
 27                 log_printf("unable to get timer buffer\n");
 28                 return;
 29         }
 30         timer->count = 0;
 31         timer->timeout = timeout;
 32         timer->timercb = timercb;
 33         INIT_LIST_HEAD(&timer->list);
 34         list_add(&timer->list, &timers);
 35 }
 36 
 37 static void timer_proc(int signo)
 38 {
 39         struct list_head *p;
 40         list_for_each(p, &timers)
 41         {
 42                 struct timer *q = container_of(p, struct timer, list);
 43                 q->count++;
 44                 if(!(q->count%q->timeout))
 45                 {
 46                         q->timercb();
 47                 }
 48         }
 49         alarm(1);
 50 }
 51 
 52 void timer_init(void)
 53 {
 54         struct sigaction s;
 55         INIT_LIST_HEAD(&timers);
 56         s.sa_handler = timer_proc;
 57         s.sa_flags = 0;
 58         sigaction(SIGALRM, &s, NULL);
 59         alarm(1);
 60 }
 61 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt