Index: sys/net/if_bridge.c =================================================================== --- sys/net/if_bridge.c +++ sys/net/if_bridge.c @@ -1007,7 +1007,6 @@ ifs->if_bridge = NULL; BRIDGE_XLOCK(sc); LIST_REMOVE(bif, bif_next); - BRIDGE_XDROP(sc); /* * If removing the interface that gave the bridge its mac address, set @@ -1025,8 +1024,11 @@ IF_LLADDR(sc->sc_ifp), ETHER_ADDR_LEN); sc->sc_ifaddr = fif; } + BRIDGE_UNLOCK(sc); EVENTHANDLER_INVOKE(iflladdr_event, sc->sc_ifp); + BRIDGE_LOCK(sc); } + BRIDGE_XDROP(sc); bridge_linkcheck(sc); bridge_mutecaps(sc); /* recalcuate now this interface is removed */ @@ -1187,7 +1189,12 @@ !memcmp(IF_LLADDR(sc->sc_ifp), sc->sc_defaddr, ETHER_ADDR_LEN)) { bcopy(IF_LLADDR(ifs), IF_LLADDR(sc->sc_ifp), ETHER_ADDR_LEN); sc->sc_ifaddr = ifs; + + BRIDGE_XLOCK(sc); + BRIDGE_UNLOCK(sc); EVENTHANDLER_INVOKE(iflladdr_event, sc->sc_ifp); + BRIDGE_LOCK(sc); + BRIDGE_XDROP(sc); } ifs->if_bridge = sc;