summaryrefslogtreecommitdiff
path: root/usr.sbin/mrouted/callout.c
diff options
context:
space:
mode:
authorGarrett Wollman <wollman@FreeBSD.org>1995-06-13 18:05:16 +0000
committerGarrett Wollman <wollman@FreeBSD.org>1995-06-13 18:05:16 +0000
commit2897e6fd5f1900ef0157f94ea420dadfbd34289e (patch)
tree251f664e3bb6640c0dc6968bd9a6ec402be8d14b /usr.sbin/mrouted/callout.c
parent1c5de19afb6f90f3f231c942b622f1556cfd4639 (diff)
downloadsrc-test2-2897e6fd5f1900ef0157f94ea420dadfbd34289e.tar.gz
src-test2-2897e6fd5f1900ef0157f94ea420dadfbd34289e.zip
Notes
Diffstat (limited to 'usr.sbin/mrouted/callout.c')
-rw-r--r--usr.sbin/mrouted/callout.c67
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