mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-08 12:18:42 +00:00
Fixed deferred route freeing crash
The sending channel may be already gone when rte_free_deferred() is finally called so we have to log about route freeing in the synchronous call instead.
This commit is contained in:
parent
b548ffe197
commit
45cd4bbe9c
@ -558,6 +558,7 @@ rte_free(struct rte_storage *e, struct rtable_private *tab)
|
|||||||
if (!tab->rte_free_deferred++)
|
if (!tab->rte_free_deferred++)
|
||||||
rt_lock_table(tab);
|
rt_lock_table(tab);
|
||||||
|
|
||||||
|
rt_rte_trace_in(D_ROUTES, e->rte.sender->req, &e->rte, "freeing");
|
||||||
defer_call(&rfdi.dc, sizeof rfdi);
|
defer_call(&rfdi.dc, sizeof rfdi);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -571,8 +572,6 @@ rte_free_deferred(struct deferred_call *dc)
|
|||||||
|
|
||||||
/* No need for synchronize_rcu, implied by the deferred_call */
|
/* No need for synchronize_rcu, implied by the deferred_call */
|
||||||
|
|
||||||
rt_rte_trace_in(D_ROUTES, e->rte.sender->req, &e->rte, "freeing");
|
|
||||||
|
|
||||||
struct netindex *i = RTE_GET_NETINDEX(&e->rte);
|
struct netindex *i = RTE_GET_NETINDEX(&e->rte);
|
||||||
net_unlock_index(tab->netindex, i);
|
net_unlock_index(tab->netindex, i);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user