From b807ef9a15db2a5db14f68011923975dfc472f49 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Thu, 12 Feb 2009 13:43:06 +0100 Subject: Fixes bug in protocol state machine Scheduling flush must be done before resource pool freeing as it frees some allocated list nodes from a global list. --- nest/proto.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'nest/proto.c') diff --git a/nest/proto.c b/nest/proto.c index 2e1eb8f..0ad7229 100644 --- a/nest/proto.c +++ b/nest/proto.c @@ -605,6 +605,9 @@ proto_notify_state(struct proto *p, unsigned ps) switch (ps) { case PS_DOWN: + if ((cs = FS_FEEDING) || (cs == FS_HAPPY)) + proto_schedule_flush(p); + neigh_prune(); // FIXME convert neighbors to resource? rfree(p->pool); p->pool = NULL; @@ -614,9 +617,6 @@ proto_notify_state(struct proto *p, unsigned ps) proto_fell_down(p); return; /* The protocol might have ceased to exist */ } - /* Otherwise, we have something to flush... */ - else if (cs != FS_FLUSHING) - proto_schedule_flush(p); break; case PS_START: ASSERT(ops == PS_DOWN); -- cgit v1.2.3