Okay, that sounds fine, applied and pushed too,
thank !
Daniel
On Sun, Dec 01, 2013 at 11:46:06PM +0900, Ryota Ozaki wrote:
> The original code ignored errors of virDomainHostdevDefAlloc,
> however, we should properly do error return from the function
> if it occurs.
>
> The fix pulls out virDomainHostdevDefAlloc from the loop and
> executes it all together before the loop. So we can easily
> return on errors without the notion of other memory allocations
> in the loop.
>
> The deallocation code is separated from the allocation code
> because it will be used by a further patch for fixing other error
> handlings.
>
> Reported-by: Laine Stump <[email protected]>
> Signed-off-by: Ryota Ozaki <[email protected]>
> ---
> src/vbox/vbox_tmpl.c | 19 +++++++++++++++----
> 1 file changed, 15 insertions(+), 4 deletions(-)
>
> diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
> index cc5f275..9336514 100644
> --- a/src/vbox/vbox_tmpl.c
> +++ b/src/vbox/vbox_tmpl.c
> @@ -2269,6 +2269,12 @@ static void vboxHostDeviceGetXMLDesc(vboxGlobalData
> *data, virDomainDefPtr def,
> if (VIR_ALLOC_N(def->hostdevs, def->nhostdevs) < 0)
> goto release_filters;
>
> + for (i = 0; i < def->nhostdevs; i++) {
> + def->hostdevs[i] = virDomainHostdevDefAlloc();
> + if (!def->hostdevs[i])
> + goto release_hostdevs;
> + }
> +
> for (i = 0; i < deviceFilters.count; i++) {
> PRBool active = PR_FALSE;
> IUSBDeviceFilter *deviceFilter = deviceFilters.items[i];
> @@ -2284,10 +2290,6 @@ static void vboxHostDeviceGetXMLDesc(vboxGlobalData
> *data, virDomainDefPtr def,
> if (!active)
> continue;
>
> - def->hostdevs[USBFilterCount] = virDomainHostdevDefAlloc();
> - if (!def->hostdevs[USBFilterCount])
> - continue;
> -
> def->hostdevs[USBFilterCount]->mode =
> VIR_DOMAIN_HOSTDEV_MODE_SUBSYS;
> def->hostdevs[USBFilterCount]->source.subsys.type =
> @@ -2322,6 +2324,15 @@ release_controller:
> #else
> VBOX_RELEASE(USBDeviceFilters);
> #endif
> +
> + return;
> +
> +release_hostdevs:
> + for (i = 0; i < def->nhostdevs; i++)
> + virDomainHostdevDefFree(def->hostdevs[i]);
> + VIR_FREE(def->hostdevs);
> +
> + goto release_filters;
> }
>
> static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) {
> --
> 1.8.4
>
> --
> libvir-list mailing list
> [email protected]
> https://www.redhat.com/mailman/listinfo/libvir-list
--
Daniel Veillard | Open Source and Standards, Red Hat
[email protected] | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list