From: Ondrej Zajicek Date: Thu, 12 Feb 2009 12:43:06 +0000 (+0100) Subject: Fixes bug in protocol state machine X-Git-Tag: v1.2.0~147 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b807ef9a15db2a5db14f68011923975dfc472f49;p=thirdparty%2Fbird.git 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. --- diff --git a/nest/proto.c b/nest/proto.c index 2e1eb8f00..0ad7229cd 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);