From 584180fce7ad11516a256b8abd4621138337e918 Mon Sep 17 00:00:00 2001 From: Alexander Morozov Date: Tue, 31 Mar 2015 09:34:03 -0700 Subject: [PATCH] Initialize portMapper in RequestPort too Api requesting port for daemon before init_networkdriver called. Problem is that now initialization of api depends on initialization of daemon and their intializations runs in parallel. Proper fix will be just do it sequentially. For now I don't want refactor it, because it can bring additional problems in 1.6.0. Signed-off-by: Alexander Morozov --- daemon/networkdriver/bridge/driver.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/daemon/networkdriver/bridge/driver.go b/daemon/networkdriver/bridge/driver.go index 21d8c44554..42015ce2fd 100644 --- a/daemon/networkdriver/bridge/driver.go +++ b/daemon/networkdriver/bridge/driver.go @@ -78,12 +78,19 @@ var ( bridgeIPv6Addr net.IP globalIPv6Network *net.IPNet portMapper *portmapper.PortMapper + once sync.Once defaultBindingIP = net.ParseIP("0.0.0.0") currentInterfaces = ifaces{c: make(map[string]*networkInterface)} ipAllocator = ipallocator.New() ) +func initPortMapper() { + once.Do(func() { + portMapper = portmapper.New() + }) +} + func InitDriver(job *engine.Job) error { var ( networkv4 *net.IPNet @@ -100,7 +107,7 @@ func InitDriver(job *engine.Job) error { fixedCIDR = job.Getenv("FixedCIDR") fixedCIDRv6 = job.Getenv("FixedCIDRv6") ) - portMapper = portmapper.New() + initPortMapper() if defaultIP := job.Getenv("DefaultBindingIP"); defaultIP != "" { defaultBindingIP = net.ParseIP(defaultIP) @@ -353,6 +360,7 @@ func setupIPTables(addr net.Addr, icc, ipmasq bool) error { } func RequestPort(ip net.IP, proto string, port int) (int, error) { + initPortMapper() return portMapper.Allocator.RequestPort(ip, proto, port) }