diff options
author | Garrett Wollman <wollman@FreeBSD.org> | 1995-06-13 18:05:16 +0000 |
---|---|---|
committer | Garrett Wollman <wollman@FreeBSD.org> | 1995-06-13 18:05:16 +0000 |
commit | 2897e6fd5f1900ef0157f94ea420dadfbd34289e (patch) | |
tree | 251f664e3bb6640c0dc6968bd9a6ec402be8d14b /usr.sbin/mrouted/callout.c | |
parent | 1c5de19afb6f90f3f231c942b622f1556cfd4639 (diff) | |
download | src-test2-2897e6fd5f1900ef0157f94ea420dadfbd34289e.tar.gz src-test2-2897e6fd5f1900ef0157f94ea420dadfbd34289e.zip |
Notes
Diffstat (limited to 'usr.sbin/mrouted/callout.c')
-rw-r--r-- | usr.sbin/mrouted/callout.c | 67 |
1 files changed, 33 insertions, 34 deletions
diff --git a/usr.sbin/mrouted/callout.c b/usr.sbin/mrouted/callout.c index 04b1521b1d40..e2e81fb963b8 100644 --- a/usr.sbin/mrouted/callout.c +++ b/usr.sbin/mrouted/callout.c @@ -7,7 +7,7 @@ * Leland Stanford Junior University. * * - * $Id: callout.c,v 1.3 1995/05/16 00:28:42 jkh Exp $ + * $Id: callout.c,v 3.5 1995/05/09 01:00:39 fenner Exp $ */ #include "defs.h" @@ -22,13 +22,12 @@ typedef void (* cfunc_t)(); struct timeout_q { struct timeout_q *next; /* next event */ - int id; + int id; cfunc_t func ; /* function to call */ char *data; /* func's data */ int time; /* time offset to next event*/ }; - static void print_Q(); void callout_init() @@ -43,20 +42,20 @@ void callout_init() void age_callout_queue() { struct timeout_q *ptr; - + if (in_callout) return; in_callout = 1; ptr = Q; - + while (ptr){ if (!ptr->time ) { /* timeout has happened */ if(ptr->func) ptr->func(ptr->data); Q = Q->next; - + free(ptr); ptr = Q; } @@ -73,7 +72,7 @@ void age_callout_queue() } -/* +/* * sets the timer */ int timer_setTimer(delay, action, data) @@ -82,39 +81,39 @@ int timer_setTimer(delay, action, data) char *data; /* what to call the timeout function with */ { struct timeout_q *ptr, *node, *prev; - + if (in_callout) return -1; in_callout = 1; - - /* create a node */ + + /* create a node */ node = (struct timeout_q *)malloc(sizeof(struct timeout_q)); - if ((int) node <= 0) { + if (node == 0) { log(LOG_WARNING, 0, "Malloc Failed in timer_settimer\n"); in_callout = 0; return -1; } - node->func = action; + node->func = action; node->data = data; - node->time = delay; - node->next = 0; + node->time = delay; + node->next = 0; node->id = ++id; - + prev = ptr = Q; - + /* insert node in the queue */ - + /* if the queue is empty, insert the node and return */ if (!Q) Q = node; else { /* chase the pointer looking for the right place */ while (ptr){ - + if (delay < ptr->time){ /* right place */ - + node->next = ptr; if (ptr == Q) Q = node; @@ -127,7 +126,7 @@ int timer_setTimer(delay, action, data) } else { /* keep moving */ - + delay -= ptr->time; node->time = delay; prev = ptr; ptr = ptr->next; @@ -142,39 +141,39 @@ int timer_setTimer(delay, action, data) /* clears the associated timer */ -void timer_clearTimer( id) - int id; +void timer_clearTimer( timer_id) + int timer_id; { struct timeout_q *ptr, *prev; - + if (in_callout) return; in_callout = 1; - - - if ( !id ) {in_callout = 0; return;} - + + + if ( !timer_id ) {in_callout = 0; return;} + prev = ptr = Q; - + /* * find the right node, delete it. the subsequent node's time * gets bumped up */ - + print_Q(); while (ptr){ - if (ptr->id == id){ + if (ptr->id == timer_id){ /* got the right node */ - + /* unlink it from the queue */ if ( ptr == Q) Q = Q->next; else prev->next = ptr->next; - + /* increment next node if any */ if (ptr->next != 0) (ptr->next)->time += ptr->time; - + free(ptr->data); free(ptr); print_Q(); @@ -195,7 +194,7 @@ static void print_Q() { #ifdef IGMP_DEBUG struct timeout_q *ptr; - + for(ptr = Q; ptr; ptr = ptr->next) log(LOG_DEBUG,0,"(%d,%d) ", ptr->id, ptr->time); #endif IGMP_DEBUG |