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++)
|
||||
rt_lock_table(tab);
|
||||
|
||||
rt_rte_trace_in(D_ROUTES, e->rte.sender->req, &e->rte, "freeing");
|
||||
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 */
|
||||
|
||||
rt_rte_trace_in(D_ROUTES, e->rte.sender->req, &e->rte, "freeing");
|
||||
|
||||
struct netindex *i = RTE_GET_NETINDEX(&e->rte);
|
||||
net_unlock_index(tab->netindex, i);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user