Просмотр исходного кода

Cleanup on error in ProgramExternalConnectivity

Signed-off-by: Alessandro Boch <aboch@docker.com>
Alessandro Boch 9 лет назад
Родитель
Сommit
bace4fb6ff
1 измененных файлов с 10 добавлено и 1 удалено
  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
 	}
 
+	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 {
-		endpoint.portMapping = nil
 		return fmt.Errorf("failed to update bridge endpoint %s to store: %v", endpoint.id[0:7], err)
 	}