diff --git a/init/network.go b/init/network.go index d4a98b72..ced409b3 100644 --- a/init/network.go +++ b/init/network.go @@ -6,6 +6,7 @@ import ( "net" "os" "strings" + "sync" "time" "github.com/insomniacslk/dhcp/dhcpv4" @@ -69,7 +70,10 @@ func runDhcp(ifname string) error { } func shutdownNetwork() { - for _, ifname := range initializedIfnames { + initializedIfnames.Lock() + defer initializedIfnames.Unlock() + + for _, ifname := range initializedIfnames.v { debug("shutting down network interface %s", ifname) link, err := netlink.LinkByName(ifname) if err != nil { @@ -90,7 +94,10 @@ func shutdownNetwork() { } } -var initializedIfnames []string +var initializedIfnames = struct { + v []string + sync.Mutex +}{} func initializeNetworkInterface(ifname string) error { debug("%s: start initializing network interface", ifname) @@ -109,7 +116,9 @@ func initializeNetworkInterface(ifname string) error { if err := netlink.LinkSetUp(link); err != nil { return err } - initializedIfnames = append(initializedIfnames, ifname) + initializedIfnames.Lock() + initializedIfnames.v = append(initializedIfnames.v, ifname) + initializedIfnames.Unlock() timeout := time.After(20 * time.Second) debug("%s waiting interface to be UP", ifname)