On 05.11.2013 11:33, Laine Stump wrote: > This resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1020135 > > If networkAllocateActualDevice() had failed due to a pool of hostdev > or direct devices being depleted, the calling function could still > call networkReleaseActualDevice() as part of its cleanup, and that > function would then unconditionally decrement the connections count > for the network, even though it hadn't been incremented (due to > failure of allocate). This *was* necessary because the .actual member > of the netdef was allocated with a "lazy" algorithm, only being > created if there was a need to store data there (e.g. if a device was > allocated from a pool, or bandwidth was allocated for the device), so > there was no simple way for networkReleaseActualDevice() to tell if > something really had been allocated (i.e. if "connections++" had been > executed). > > This patch changes networkAllocateDevice() to *always* allocate an > actual device for any netdef of type='network', even if it isn't > needed for any other reason. This has no ill effects anywhere else in > the code (except for using a small amount of memory), and > networkReleaseActualDevice() can then determine if there was a > previous successful allocate by checking for .actual != NULL (if not, > it skips the "connections--"). > --- > src/network/bridge_driver.c | 41 +++++++++++------------------------------ > 1 file changed, 11 insertions(+), 30 deletions(-) ACK Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list