diff --git a/sys/net/if.c b/sys/net/if.c index 395995d..dd24ed7 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -560,7 +560,9 @@ if_rele(struct ifnet *ifp) void ifq_init(struct ifaltq *ifq, struct ifnet *ifp) { - + + memset(ifq, 0, sizeof(*ifq)); + mtx_init(&ifq->ifq_mtx, ifp->if_xname, "if send queue", MTX_DEF); if (ifq->ifq_maxlen == 0) @@ -576,6 +578,14 @@ ifq_init(struct ifaltq *ifq, struct ifnet *ifp) void ifq_delete(struct ifaltq *ifq) { + struct mbuf *m; + + while (1) { + IF_DEQUEUE(ifq, m); + if (m == NULL) + break; + m_freem(m); + } mtx_destroy(&ifq->ifq_mtx); }