From d6a836f8d673a117fd19136d24e98fa9bbc4b27e Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Mon, 8 Dec 2008 12:24:55 +0100 Subject: Fixes core state machine. The core state machine was broken - it didn't free resources in START -> DOWN transition and might freed resources after UP -> STOP transition before protocol turned down. It leads to deadlock on olock acquisition when lock was not freed during previous stop. The current behavior is that resources, allocated during DOWN -> * transition, are freed in * -> DOWN transition, and flushing (scheduled in UP -> *) just counteract feeding (scheduled in * -> UP). Protocol fell down when both flushing is done (if needed) and protocol reports DOWN. BTW, is thera a reason why neighbour cache item acquired by protocol is not tracked by resource mechanism? --- nest/neighbor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nest/neighbor.c') diff --git a/nest/neighbor.c b/nest/neighbor.c index c6e2f73..2c5af6a 100644 --- a/nest/neighbor.c +++ b/nest/neighbor.c @@ -254,7 +254,7 @@ neigh_if_down(struct iface *i) static inline void neigh_prune_one(neighbor *n) { - if (n->proto->core_state != FS_FLUSHING) + if (n->proto->proto_state != PS_DOWN) return; rem_node(&n->n); if (n->iface) -- cgit v1.2.3