From 8f9d87c6d978461c14de527376cdb9401d6b7847 Mon Sep 17 00:00:00 2001 From: Anthony Xu Date: Tue, 8 Apr 2014 16:13:33 -0700 Subject: [PATCH] Destroy unplugged VIFs before creating a VIF for a VM --- .../cloud/hypervisor/xen/resource/CitrixResourceBase.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 90042ffaf0c..91b265ba86c 100644 --- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -3947,6 +3947,13 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe while (vifIter.hasNext()) { VIF vif = vifIter.next(); try { + String deviceId = vif.getDevice(conn); + if(vm.getIsControlDomain(conn) || vif.getCurrentlyAttached(conn)) { + usedDeviceNums.add(Integer.valueOf(deviceId)); + } else { + s_logger.debug("Found unplugged VIF " + deviceId + " in VM " + vmName + " destroy it"); + vif.destroy(conn); + } usedDeviceNums.add(Integer.valueOf(vif.getDevice(conn))); } catch (NumberFormatException e) { String msg = "Obtained an invalid value for an allocated VIF device number for VM: " + vmName;