libnetwork: processEndpointCreate: Fix deadlock between getSvcRecords and processEndpointCreate
References https://github.com/moby/moby/pull/42545 Signed-off-by: Steffen Butzer <steffen.butzer@outlook.com>
This commit is contained in:
parent
050929ab83
commit
0c1a125644
1 changed files with 8 additions and 5 deletions
|
@ -340,8 +340,11 @@ func (c *controller) processEndpointCreate(nmap map[string]*netWatch, ep *endpoi
|
|||
return
|
||||
}
|
||||
|
||||
networkID := n.ID()
|
||||
endpointID := ep.ID()
|
||||
|
||||
c.Lock()
|
||||
nw, ok := nmap[n.ID()]
|
||||
nw, ok := nmap[networkID]
|
||||
c.Unlock()
|
||||
|
||||
if ok {
|
||||
|
@ -349,12 +352,12 @@ func (c *controller) processEndpointCreate(nmap map[string]*netWatch, ep *endpoi
|
|||
n.updateSvcRecord(ep, c.getLocalEps(nw), true)
|
||||
|
||||
c.Lock()
|
||||
nw.localEps[ep.ID()] = ep
|
||||
nw.localEps[endpointID] = ep
|
||||
|
||||
// If we had learned that from the kv store remove it
|
||||
// from remote ep list now that we know that this is
|
||||
// indeed a local endpoint
|
||||
delete(nw.remoteEps, ep.ID())
|
||||
delete(nw.remoteEps, endpointID)
|
||||
c.Unlock()
|
||||
return
|
||||
}
|
||||
|
@ -370,8 +373,8 @@ func (c *controller) processEndpointCreate(nmap map[string]*netWatch, ep *endpoi
|
|||
n.updateSvcRecord(ep, c.getLocalEps(nw), true)
|
||||
|
||||
c.Lock()
|
||||
nw.localEps[ep.ID()] = ep
|
||||
nmap[n.ID()] = nw
|
||||
nw.localEps[endpointID] = ep
|
||||
nmap[networkID] = nw
|
||||
nw.stopCh = make(chan struct{})
|
||||
c.Unlock()
|
||||
|
||||
|
|
Loading…
Reference in a new issue