fib: recursive calculation leads to delegate pool realloc

Type: fix

Change-Id: Ib7ac53d1b59b641ccd3b1d733107d7f1ba174314
Signed-off-by: Neale Ranns <nranns@cisco.com>
(cherry picked from commit a66020becd)
This commit is contained in:
Neale Ranns
2019-10-14 08:52:43 -07:00
parent cb19100c18
commit cbdff7518b

View File

@ -470,9 +470,12 @@ fib_entry_contribute_forwarding (fib_node_index_t fib_entry_index,
if (NULL == fed) if (NULL == fed)
{ {
fed = fib_entry_delegate_find_or_add( /*
fib_entry, * use a temporary DPO lest the delegate realloc in the recursive
fib_entry_chain_type_to_delegate_type(fct)); * calculation.
*/
dpo_id_t tmp = DPO_INVALID;
/* /*
* on-demand create eos/non-eos. * on-demand create eos/non-eos.
* There is no on-demand delete because: * There is no on-demand delete because:
@ -483,7 +486,14 @@ fib_entry_contribute_forwarding (fib_node_index_t fib_entry_index,
fib_entry_src_mk_lb(fib_entry, fib_entry_src_mk_lb(fib_entry,
fib_entry_get_best_src_i(fib_entry), fib_entry_get_best_src_i(fib_entry),
fct, fct,
&fed->fd_dpo); &tmp);
fed = fib_entry_delegate_find_or_add(
fib_entry,
fib_entry_chain_type_to_delegate_type(fct));
dpo_copy(&fed->fd_dpo, &tmp);
dpo_reset(&tmp);
} }
dpo_copy(dpo, &fed->fd_dpo); dpo_copy(dpo, &fed->fd_dpo);