summaryrefslogtreecommitdiffstats
path: root/nest
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1999-10-29 14:08:49 +0200
committerMartin Mares <mj@ucw.cz>1999-10-29 14:08:49 +0200
commit0d70292d88276a9883ab8bc15b00e6a2e2fe4487 (patch)
tree19985b61964aacd88b239cefbea547cca85eccb9 /nest
parent92af6f309b9283482384bd9bbd0351cd71e3cf1d (diff)
downloadbird-0d70292d88276a9883ab8bc15b00e6a2e2fe4487.tar
bird-0d70292d88276a9883ab8bc15b00e6a2e2fe4487.zip
Events now return a value. If it's non-zero, the event is re-queued
for processing in next event cycle. This can be used to prevent background actions (hint: user commands) from hogging the CPU for too long time.
Diffstat (limited to 'nest')
-rw-r--r--nest/proto.c8
-rw-r--r--nest/rt-table.c3
2 files changed, 7 insertions, 4 deletions
diff --git a/nest/proto.c b/nest/proto.c
index bbf5d59..3430176 100644
--- a/nest/proto.c
+++ b/nest/proto.c
@@ -36,7 +36,7 @@ static event *proto_flush_event;
static char *p_states[] = { "DOWN", "START", "UP", "STOP" };
static char *c_states[] = { "HUNGRY", "FEEDING", "HAPPY", "FLUSHING" };
-static void proto_flush_all(void *);
+static int proto_flush_all(void *);
static void
proto_enqueue(list *l, struct proto *p)
@@ -329,7 +329,7 @@ proto_fell_down(struct proto *p)
proto_rethink_goal(p);
}
-static void
+static int
proto_feed(void *P)
{
struct proto *p = P;
@@ -341,6 +341,7 @@ proto_feed(void *P)
p->core_state = FS_HAPPY;
proto_relink(p);
DBG("Protocol %s up and running\n", p->name);
+ return 0;
}
void
@@ -401,7 +402,7 @@ proto_notify_state(struct proto *p, unsigned ps)
proto_relink(p);
}
-static void
+static int
proto_flush_all(void *unused)
{
struct proto *p;
@@ -417,4 +418,5 @@ proto_flush_all(void *unused)
proto_relink(p);
proto_fell_down(p);
}
+ return 0;
}
diff --git a/nest/rt-table.c b/nest/rt-table.c
index 0f423f8..353473d 100644
--- a/nest/rt-table.c
+++ b/nest/rt-table.c
@@ -395,7 +395,7 @@ rt_dump_all(void)
rt_dump(t);
}
-static void
+static int
rt_gc(void *unused)
{
rtable *t;
@@ -404,6 +404,7 @@ rt_gc(void *unused)
rt_prune_all();
rt_last_gc = now;
rt_gc_counter = 0;
+ return 0;
}
void