瀏覽代碼

Merge pull request #42569 from steffengy/master-2

libnetwork: processEndpointCreate: Fix deadlock between getSvcRecords and processEndpointCreate
Sebastiaan van Stijn 4 年之前
父節點
當前提交
2a562b1583
共有 1 個文件被更改,包括 8 次插入5 次删除
  1. 8 5
      libnetwork/store.go

+ 8 - 5
libnetwork/store.go

@@ -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()