summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1999-02-11 22:18:26 +0100
committerMartin Mares <mj@ucw.cz>1999-02-11 22:18:26 +0100
commite8f73195fa68b027fdcb89f239107c2d4902bd9a (patch)
tree8e3bb3ee7280eec6d78ae30d44738ddf2884c4fe
parentedf62ba13fa6a74447d7ad44b23acbee964731bc (diff)
downloadbird-e8f73195fa68b027fdcb89f239107c2d4902bd9a.tar
bird-e8f73195fa68b027fdcb89f239107c2d4902bd9a.zip
Added simple event scheduling system to avoid recursive calling
of various callbacks. Events are just another resource type objects (thus automatically freed and unlinked when the protocol using them shuts down). Each event can be linked in at most one event list. For most purposes, just use the global event list handled by the following functions: ev_schedule Schedule event to be called at the next event scheduling point. If the event was already scheduled, it's just re-linked to the end of the list. ev_postpone Postpone an already scheduled event, so that it won't get called. Postponed events can be scheduled again by ev_schedule(). You can also create custom event lists to build your own synchronization primitives. Just use: ev_init_list to initialize an event list ev_enqueue to schedule event on specified event list ev_postpone works as well for custom lists ev_run_list to run all events on your custom list ev_run to run a specific event and dequeue it
-rw-r--r--TODO1
-rw-r--r--lib/Modules2
-rw-r--r--sysdep/unix/io.c5
3 files changed, 7 insertions, 1 deletions
diff --git a/TODO b/TODO
index f681997..3160b34 100644
--- a/TODO
+++ b/TODO
@@ -8,6 +8,7 @@ Core
* Fix router ID calculation
* debug dump: dump router ID as well
+* proto_report_state() !
- TOS not supported by kernel -> automatically drop routes with TOS<>0
diff --git a/lib/Modules b/lib/Modules
index b347aa2..19a7900 100644
--- a/lib/Modules
+++ b/lib/Modules
@@ -25,3 +25,5 @@ string.h
patmatch.c
slists.c
slists.h
+event.c
+event.h
diff --git a/sysdep/unix/io.c b/sysdep/unix/io.c
index 0d8f125..bb8f8af 100644
--- a/sysdep/unix/io.c
+++ b/sysdep/unix/io.c
@@ -20,6 +20,7 @@
#include "lib/resource.h"
#include "lib/timer.h"
#include "lib/socket.h"
+#include "lib/event.h"
#include "nest/iface.h"
#include "lib/unix.h"
@@ -58,7 +59,7 @@ tm_dump(resource *r)
{
timer *t = (timer *) r;
- debug("(code %p, data %p, ");
+ debug("(code %p, data %p, ", t->hook, t->data);
if (t->randomize)
debug("rand %d, ", t->randomize);
if (t->recurrent)
@@ -682,6 +683,7 @@ io_init(void)
init_list(&near_timers);
init_list(&far_timers);
init_list(&sock_list);
+ init_list(&global_event_list);
now = time(NULL);
}
@@ -701,6 +703,7 @@ io_loop(void)
FD_ZERO(&wr);
for(;;)
{
+ ev_run_list(&global_event_list);
now = time(NULL);
tout = tm_first_shot();
if (tout <= now)