diff options
Diffstat (limited to 'contrib/timer-wheel/timer-wheel.h')
| -rw-r--r-- | contrib/timer-wheel/timer-wheel.h | 71 | 
1 files changed, 71 insertions, 0 deletions
diff --git a/contrib/timer-wheel/timer-wheel.h b/contrib/timer-wheel/timer-wheel.h new file mode 100644 index 00000000000..74b8dfdff5e --- /dev/null +++ b/contrib/timer-wheel/timer-wheel.h @@ -0,0 +1,71 @@ +/* +  This program is free software; you can redistribute it and/or modify +  it under the terms of the GNU General Public License as published by +  the Free Software Foundation; either version 2 of the License, or +  (at your option) any later version. + +  This program is distributed in the hope that it will be useful, +  but WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +  GNU General Public License for more details. + +  You should have received a copy of the GNU General Public License along +  with this program; if not, write to the Free Software Foundation, Inc., +  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef __TIMER_WHEEL_H +#define __TIMER_WHEEL_H + +#include <pthread.h> + +#include "list.h" + +#define TVR_BITS  8 +#define TVN_BITS  6 +#define TVR_SIZE  (1 << TVR_BITS) +#define TVN_SIZE  (1 << TVN_BITS) +#define TVR_MASK  (TVR_SIZE - 1) +#define TVN_MASK  (TVN_SIZE - 1) + +#define BITS_PER_LONG  64 + +struct tvec { +        struct list_head vec[TVN_SIZE]; +}; + +struct tvec_root { +        struct list_head vec[TVR_SIZE]; +}; + +struct tvec_base { +        pthread_spinlock_t lock;      /* base lock */ + +        pthread_t runner;             /* run_timer() */ + +        unsigned long timer_sec;      /* time counter */ + +        struct tvec_root tv1; +        struct tvec tv2; +        struct tvec tv3; +        struct tvec tv4; +        struct tvec tv5; +}; + +struct gf_tw_timer_list { +        void *data; +        unsigned long expires; + +        /** callback routine */ +        void (*function)(struct gf_tw_timer_list *, void *, unsigned long); + +        struct list_head entry; +}; + +/** The API! */ +struct tvec_base *gf_tw_init_timers (); +int gf_tw_cleanup_timers (struct tvec_base *); +void gf_tw_add_timer (struct tvec_base *, struct gf_tw_timer_list *); +void gf_tw_del_timer (struct gf_tw_timer_list *); + +#endif  | 
