From 56ccdb40aba41facf5f2762f8b163222c7acdc88 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 18 Mar 2013 18:06:24 +0100 Subject: Add support for scheduled jobs --- mmss/mmss.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'mmss/mmss.c') diff --git a/mmss/mmss.c b/mmss/mmss.c index ae87afb..31a5623 100644 --- a/mmss/mmss.c +++ b/mmss/mmss.c @@ -39,6 +39,21 @@ static void init_nodes(gmrf_t *nodes) { } +static inline int timeout_min(int a, int b) { + if (a < 0) + return b; + else if (b < 0) + return a; + else + return min(a, b); +} + + +static int get_queue_timeout(const mmss_t *mmss) { + return timeout_min(mmss_queue_timeout(mmss, &mmss->packet_queue), mmss_queue_timeout(mmss, &mmss->scheduled_queue)); +} + + int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "usage: %s protocol_module\n", argv[0]); @@ -75,7 +90,7 @@ int main(int argc, char *argv[]) { init_nodes(nodes); while (true) { - int timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue); + int timeout = get_queue_timeout(&mmss); if (timeout < 0) { fprintf(stderr, "Nothing queued, deadlock occured.\n"); @@ -84,23 +99,27 @@ int main(int argc, char *argv[]) { if (timeout > 0) { assert(!mmss_queue_get(&mmss, &mmss.packet_queue)); + assert(!mmss_queue_get(&mmss, &mmss.scheduled_queue)); mmss.now += timeout; - timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue); + timeout = get_queue_timeout(&mmss); } assert(timeout == 0); while (timeout == 0) { mmss_packet_t *packet = mmss_queue_get(&mmss, &mmss.packet_queue); - assert(packet); + mmss_scheduled_t *scheduled = mmss_queue_get(&mmss, &mmss.scheduled_queue); + + assert(packet || scheduled); - packet->dest->node->proto->handle_packet(packet->dest->node, packet->dest->node->ctx, packet->dest, - &packet->source->address, packet->data, packet->len); + if(packet) + mmss_dispatch(packet); - free(packet); + if (scheduled) + mmss_run_scheduled(scheduled); - timeout = mmss_queue_timeout(&mmss, &mmss.packet_queue); + timeout = get_queue_timeout(&mmss); } } -- cgit v1.2.3