diff --git sys/net/route.c sys/net/route.c index 85a4f426450..e525ce31a6a 100644 --- sys/net/route.c +++ sys/net/route.c @@ -1600,6 +1600,7 @@ rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt, if (error != 0) return (error); + RT_UNLOCK(rt); rt_notifydelete(rt, info); /* @@ -1607,11 +1608,10 @@ rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt, * but it's up to it to free the rtentry as we won't be * doing it. */ - if (ret_nrt) { + if (ret_nrt) *ret_nrt = rt; - RT_UNLOCK(rt); - } else - RTFREE_LOCKED(rt); + else + RTFREE(rt); break; case RTM_RESOLVE: /*