Procházet zdrojové kódy

Cleanup on error in ProgramExternalConnectivity

Signed-off-by: Alessandro Boch <aboch@docker.com>
Alessandro Boch před 9 roky
rodič
revize
bace4fb6ff
1 změnil soubory, kde provedl 10 přidání a 1 odebrání
  1. 10 1
      libnetwork/drivers/bridge/bridge.go

+ 10 - 1
libnetwork/drivers/bridge/bridge.go

@@ -1243,8 +1243,17 @@ func (d *driver) ProgramExternalConnectivity(nid, eid string, options map[string
 		return err
 		return err
 	}
 	}
 
 
+	defer func() {
+		if err != nil {
+			if e := network.releasePorts(endpoint); e != nil {
+				logrus.Errorf("Failed to release ports allocated for the bridge endpoint %s on failure %v because of %v",
+					eid, err, e)
+			}
+			endpoint.portMapping = nil
+		}
+	}()
+
 	if err = d.storeUpdate(endpoint); err != nil {
 	if err = d.storeUpdate(endpoint); err != nil {
-		endpoint.portMapping = nil
 		return fmt.Errorf("failed to update bridge endpoint %s to store: %v", endpoint.id[0:7], err)
 		return fmt.Errorf("failed to update bridge endpoint %s to store: %v", endpoint.id[0:7], err)
 	}
 	}