From: Huanle Han Date: Thu, 26 Mar 2015 14:23:46 +0000 (+0800) Subject: hostdev: Fix index error in loop after remove an element X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=7adb4bfc805ee61714df5a2d43688096bdfe17d6;p=libvirt.git hostdev: Fix index error in loop after remove an element 'virPCIDeviceList' is actually an array. Removing one element makes the rest of the element move. Use while loop, increase index only when not virPCIDeviceListDel(pcidevs, dev) Signed-off-by: Huanle Han --- diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c index 23365a3129..83f567d307 100644 --- a/src/util/virhostdev.c +++ b/src/util/virhostdev.c @@ -785,7 +785,8 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr, * them and reset all the devices before re-attach. * Attach mac and port profile parameters to devices */ - for (i = 0; i < virPCIDeviceListCount(pcidevs); i++) { + i = 0; + while (i < virPCIDeviceListCount(pcidevs)) { virPCIDevicePtr dev = virPCIDeviceListGet(pcidevs, i); virPCIDevicePtr activeDev = NULL; @@ -806,6 +807,7 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr, } virPCIDeviceListDel(hostdev_mgr->activePCIHostdevs, dev); + i++; } /* At this point, any device that had been used by the guest is in