On Tue, Feb 16, 2010 at 02:37:02PM -0500, Cole Robinson wrote:
> Currently we just error with ex. 'virbr0: No such device'.
>
> Since we are using public API calls here, we need to ensure that any
> raised error is properly saved and restored, since API entry points
> always reset messages.
>
> Signed-off-by: Cole Robinson
> ---
> src/qemu/qemu_conf.c | 28 +---
> 1 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index c9fe55b..6c64deb 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -1482,17 +1482,39 @@ qemudNetworkIfaceConnect(virConnectPtr conn,
> int template_ifname = 0;
>
> if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
> +int active, fail = 0;
> +virErrorPtr errobj;
> virNetworkPtr network = virNetworkLookupByName(conn,
> -
> net->data.network.name);
> +
> net->data.network.name);
> if (!network)
> return -1;
>
> -brname = virNetworkGetBridgeName(network);
> +active = virNetworkIsActive(network);
> +if (active != 1) {
> +fail = 1;
>
> +if (active == 0)
> +qemuReportError(VIR_ERR_INTERNAL_ERROR,
> +_("Network '%s' is not active."),
> +net->data.network.name);
> +}
> +
> +if (!fail) {
> +brname = virNetworkGetBridgeName(network);
> +if (brname == NULL)
> +fail = 1;
> +}
> +
> +/* Make sure any above failure is preserved */
> +errobj = virSaveLastError();
> virNetworkFree(network);
> +virSetError(errobj);
> +virFreeError(errobj);
>
> -if (brname == NULL)
> +errobj = virSaveLastError();
> +if (fail)
> return -1;
> +
> } else if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) {
> if (!(brname = strdup(net->data.bridge.brname))) {
> virReportOOMError();
> --
ACK
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list