summaryrefslogtreecommitdiff
path: root/utils/open-isns/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/open-isns/timer.c')
-rw-r--r--utils/open-isns/timer.c126
1 files changed, 0 insertions, 126 deletions
diff --git a/utils/open-isns/timer.c b/utils/open-isns/timer.c
deleted file mode 100644
index ed8a23f..0000000
--- a/utils/open-isns/timer.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Timers (one-short and periodic)
- *
- * Copyright (C) 2007 Olaf Kirch <olaf.kirch@oracle.com>
- */
-
-#include <stdlib.h>
-#include <time.h>
-#include "isns.h"
-#include "util.h"
-
-typedef struct isns_timer isns_timer_t;
-struct isns_timer {
- isns_list_t it_list;
- time_t it_when;
- unsigned int it_period;
- isns_timer_callback_t * it_func;
- void * it_data;
-};
-
-
-static ISNS_LIST_DECLARE(timers);
-
-static void
-__isns_arm_timer(isns_timer_t *tm)
-{
- isns_list_t *pos, *next;
- time_t when = tm->it_when;
-
- isns_list_foreach(&timers, pos, next) {
- isns_timer_t *cur = isns_list_item(isns_timer_t, it_list, pos);
-
- if (when < cur->it_when)
- break;
- }
- isns_item_insert_before(pos, &tm->it_list);
-}
-
-static isns_timer_t *
-__isns_create_timer(time_t when,
- unsigned int period,
- isns_timer_callback_t *fn,
- void *data)
-{
- isns_timer_t *tm;
-
- tm = isns_calloc(1, sizeof(*tm));
- tm->it_when = when;
- tm->it_period = period;
- tm->it_func = fn;
- tm->it_data = data;
- return tm;
-}
-
-void
-isns_add_timer(unsigned int period,
- isns_timer_callback_t *fn,
- void *data)
-{
- isns_timer_t *tm;
-
- isns_assert(period);
- tm = __isns_create_timer(time(NULL) + period, period, fn, data);
- __isns_arm_timer(tm);
-}
-
-void
-isns_add_oneshot_timer(unsigned int expires,
- isns_timer_callback_t *fn,
- void *data)
-{
- isns_timer_t *tm;
-
- tm = __isns_create_timer(time(NULL) + expires, 0, fn, data);
- __isns_arm_timer(tm);
-}
-
-void
-isns_cancel_timer(isns_timer_callback_t *fn, void *data)
-{
- isns_list_t *pos, *next;
-
- isns_list_foreach(&timers, pos, next) {
- isns_timer_t *tm = isns_list_item(isns_timer_t, it_list, pos);
-
- if (tm->it_func == fn
- && (data == NULL || tm->it_data == data)) {
- isns_list_del(pos);
- isns_free(tm);
- }
- }
-}
-
-time_t
-isns_run_timers(void)
-{
-
- while (!isns_list_empty(&timers)) {
- isns_timer_t *tm = isns_list_item(isns_timer_t, it_list, timers.next);
- isns_timer_callback_t *func;
- time_t expire;
- void *data;
-
- expire = tm->it_when;
- if (time(NULL) < expire)
- return expire;
-
- isns_list_del(&tm->it_list);
- func = tm->it_func;
- data = tm->it_data;
- expire = 0;
-
- /* If it's a periodic timer, rearm it now. This allows
- * the timer callback to cancel the timer. */
- if (tm->it_period) {
- tm->it_when = time(NULL) + tm->it_period;
- __isns_arm_timer(tm);
- } else {
- isns_free(tm);
- }
-
- func(data);
- }
-
- return 0;
-}