XFREE(MTYPE_BGP_ADJ_IN, bai);
}
-bool bgp_adj_in_unset(struct bgp_dest *dest, struct peer *peer,
+bool bgp_adj_in_unset(struct bgp_dest **dest, struct peer *peer,
uint32_t addpath_id)
{
struct bgp_adj_in *adj;
struct bgp_adj_in *adj_next;
- adj = dest->adj_in;
+ adj = (*dest)->adj_in;
if (!adj)
return false;
adj_next = adj->next;
if (adj->peer == peer && adj->addpath_rx_id == addpath_id)
- bgp_adj_in_remove(&dest, adj);
+ bgp_adj_in_remove(dest, adj);
adj = adj_next;
- assert(dest);
+ assert(*dest);
}
return true;
uint32_t addpath_tx_id);
extern void bgp_adj_in_set(struct bgp_dest *dest, struct peer *peer,
struct attr *attr, uint32_t addpath_id);
-extern bool bgp_adj_in_unset(struct bgp_dest *dest, struct peer *peer,
+extern bool bgp_adj_in_unset(struct bgp_dest **dest, struct peer *peer,
uint32_t addpath_id);
extern void bgp_adj_in_remove(struct bgp_dest **dest, struct bgp_adj_in *bai);
*/
if (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_SOFT_RECONFIG)
&& peer != bgp->peer_self)
- if (!bgp_adj_in_unset(dest, peer, addpath_id)) {
+ if (!bgp_adj_in_unset(&dest, peer, addpath_id)) {
+ assert(dest);
peer->stat_pfx_dup_withdraw++;
if (bgp_debug_update(peer, p, NULL, 1)) {
}
/* Lookup withdrawn route. */
+ assert(dest);
for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next)
if (pi->peer == peer && pi->type == type
&& pi->sub_type == sub_type