Selaa lähdekoodia

Merge pull request #42545 from steffengy/master

libnetwork: processEndpointDelete: Fix deadlock between getSvcRecords and processEndpointDelete
Brian Goff 4 vuotta sitten
vanhempi
commit
3ad9549e70
1 muutettua tiedostoa jossa 7 lisäystä ja 4 poistoa
  1. 7 4
      libnetwork/store.go

+ 7 - 4
libnetwork/store.go

@@ -402,11 +402,14 @@ func (c *controller) processEndpointDelete(nmap map[string]*netWatch, ep *endpoi
 		return
 	}
 
+	networkID := n.ID()
+	endpointID := ep.ID()
+
 	c.Lock()
-	nw, ok := nmap[n.ID()]
+	nw, ok := nmap[networkID]
 
 	if ok {
-		delete(nw.localEps, ep.ID())
+		delete(nw.localEps, endpointID)
 		c.Unlock()
 
 		// Update the svc db about local endpoint leave right away
@@ -420,9 +423,9 @@ func (c *controller) processEndpointDelete(nmap map[string]*netWatch, ep *endpoi
 
 			// This is the last container going away for the network. Destroy
 			// this network's svc db entry
-			delete(c.svcRecords, n.ID())
+			delete(c.svcRecords, networkID)
 
-			delete(nmap, n.ID())
+			delete(nmap, networkID)
 		}
 	}
 	c.Unlock()