diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c index 5b6f58f79f5..1ca0f886d1b 100644 --- a/sys/netinet6/nd6.c +++ b/sys/netinet6/nd6.c @@ -483,7 +483,6 @@ nd6_llinfo_timer(void *arg) switch (ln->ln_state) { case ND6_LLINFO_WAITDELETE: - LLE_REMREF(ln); nd6_free(ln, 0); ln = NULL; break; @@ -537,7 +536,6 @@ nd6_llinfo_timer(void *arg) case ND6_LLINFO_STALE: /* Garbage Collection(RFC 2461 5.3) */ if (!ND6_LLINFO_PERMANENT(ln)) { - LLE_REMREF(ln); nd6_free(ln, 1); ln = NULL; } @@ -561,7 +559,6 @@ nd6_llinfo_timer(void *arg) daddr6 = &ln->r_l3addr.addr6; send_ns = true; } else { - LLE_REMREF(ln); nd6_free(ln, 0); ln = NULL; } @@ -1240,6 +1237,7 @@ nd6_free(struct llentry *ln, int gc) (ln->ln_expire - time_uptime) * hz); else nd6_llinfo_settimer(ln, nd6_gctimer * hz); + LLE_REMREF(ln); LLE_WUNLOCK(ln); return; } @@ -1317,6 +1315,7 @@ nd6_free(struct llentry *ln, int gc) IF_AFDATA_LOCK(ifp); LLE_WLOCK(ln); + LLE_REMREF(ln); lltable_free_entry(LLTABLE6(ifp), ln); IF_AFDATA_UNLOCK(ifp);