diff options
| author | Kip Macy <kmacy@FreeBSD.org> | 2009-07-11 21:56:23 +0000 |
|---|---|---|
| committer | Kip Macy <kmacy@FreeBSD.org> | 2009-07-11 21:56:23 +0000 |
| commit | 6a7bff2c31d1bb57e006edbb82660cc13504a802 (patch) | |
| tree | 126951e7b9f9628460e1ffc8d66932710ccfb1a2 | |
| parent | 383334b383a6d879a1292348290d8111cff09e24 (diff) | |
Notes
| -rw-r--r-- | sys/net/route.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/net/route.c b/sys/net/route.c index a3dc1693a36e..750829a77e6b 100644 --- a/sys/net/route.c +++ b/sys/net/route.c @@ -987,7 +987,16 @@ rn_mpath_update(int req, struct rt_addrinfo *info, (rt->rt_gateway->sa_len != gateway->sa_len || memcmp(rt->rt_gateway, gateway, gateway->sa_len))) error = ESRCH; - goto done; + else { + /* + * remove from tree before returning it + * to the caller + */ + rn = rnh->rnh_deladdr(dst, netmask, rnh); + KASSERT(rt == RNTORT(rn), ("radix node disappeared")); + goto gwdelete; + } + } /* * use the normal delete code to remove @@ -1005,6 +1014,7 @@ rn_mpath_update(int req, struct rt_addrinfo *info, */ if ((req == RTM_DELETE) && !rt_mpath_deldup(rto, rt)) panic ("rtrequest1: rt_mpath_deldup"); +gwdelete: RT_LOCK(rt); RT_ADDREF(rt); if (req == RTM_DELETE) { |
