Commit b807ef9a authored by Ondřej Zajíček's avatar Ondřej Zajíček
Browse files

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.
parent 80ac7dc1
......@@ -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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment