diff --git a/libnetwork/agent.go b/libnetwork/agent.go index 499e2d5221..2b2ecf4324 100644 --- a/libnetwork/agent.go +++ b/libnetwork/agent.go @@ -193,9 +193,12 @@ func (c *controller) agentSetup() error { } } - if c.agent != nil { + c.Lock() + if c.agent != nil && c.agentInitDone != nil { close(c.agentInitDone) + c.agentInitDone = nil } + c.Unlock() return nil } diff --git a/libnetwork/controller.go b/libnetwork/controller.go index b1094a3b95..ff22d79d98 100644 --- a/libnetwork/controller.go +++ b/libnetwork/controller.go @@ -347,7 +347,13 @@ func (c *controller) clusterAgentInit() { // AgentInitWait waits for agent initialization to be completed in the // controller. func (c *controller) AgentInitWait() { - <-c.agentInitDone + c.Lock() + agentInitDone := c.agentInitDone + c.Unlock() + + if agentInitDone != nil { + <-agentInitDone + } } func (c *controller) makeDriverConfig(ntype string) map[string]interface{} {