Index: if_bridge.c =================================================================== RCS file: /usr/repo/src/sys/net/if_bridge.c,v retrieving revision 1.16 diff -u -p -r1.16 if_bridge.c --- if_bridge.c 9 Aug 2005 10:19:58 -0000 1.16 +++ if_bridge.c 20 Aug 2005 16:00:01 -0000 @@ -500,6 +500,7 @@ bridge_clone_destroy(struct ifnet *ifp) mtx_lock(&bridge_list_mtx); LIST_REMOVE(sc, sc_list); + sc->sc_flags |= BRIDGE_FLAG_DYING; mtx_unlock(&bridge_list_mtx); ether_ifdetach(ifp); @@ -1208,6 +1209,9 @@ bridge_init(void *xsc) struct bridge_softc *sc = (struct bridge_softc *)xsc; struct ifnet *ifp = sc->sc_ifp; + if (sc->sc_flags & BRIDGE_FLAG_DYING) + return; + if (ifp->if_drv_flags & IFF_DRV_RUNNING) return; Index: if_bridgevar.h =================================================================== RCS file: /usr/repo/src/sys/net/if_bridgevar.h,v retrieving revision 1.4 diff -u -p -r1.4 if_bridgevar.h --- if_bridgevar.h 6 Jul 2005 01:24:45 -0000 1.4 +++ if_bridgevar.h 20 Aug 2005 15:58:34 -0000 @@ -295,6 +295,8 @@ struct bridge_softc { LIST_HEAD(, bridge_rtnode) *sc_rthash; /* our forwarding table */ LIST_HEAD(, bridge_rtnode) sc_rtlist; /* list version of above */ uint32_t sc_rthash_key; /* key for hash */ +#define BRIDGE_FLAG_DYING 0x01 + uint8_t sc_flags; }; #define BRIDGE_LOCK_INIT(_sc) do { \