diff --git a/routingtable/adjRIBOut/adj_rib_out.go b/routingtable/adjRIBOut/adj_rib_out.go index e195ff01047904fca202454d5a100e97a1660c57..7aa1eb77932c6e2cbaace1f3989849e8f6edcc83 100644 --- a/routingtable/adjRIBOut/adj_rib_out.go +++ b/routingtable/adjRIBOut/adj_rib_out.go @@ -138,29 +138,28 @@ func (a *AdjRIBOut) RemovePath(pfx bnet.Prefix, p *route.Path) bool { return false } + q := p if a.addPathTX { for _, q := range r.Paths() { if q.Select(p) == 0 { a.rt.RemovePath(pfx, q) + + // try to find the PathID + pathID, err := a.pathIDManager.releasePath(p) + if err != nil { + log.Warningf("Unable to release path for prefix %s: %v", pfx.String(), err) + return true + } + + p = p.Copy() + p.BGPPath.PathIdentifier = pathID } } } else { a.rt.RemovePath(pfx, p) } - // If the neighbor has AddPath capabilities, try to find the PathID - if a.addPathTX { - pathID, err := a.pathIDManager.releasePath(p) - if err != nil { - log.Warningf("Unable to release path for prefix %s: %v", pfx.String(), err) - return true - } - - p = p.Copy() - p.BGPPath.PathIdentifier = pathID - } - - a.removePathFromClients(pfx, p) + a.removePathFromClients(pfx, q) return true }