[libvirt] [PATCH 3/4] parallels: don't add domain to the list twice

Daniel P. Berrange berrange at redhat.com
Wed May 7 13:55:09 UTC 2014


On Wed, Apr 23, 2014 at 06:35:02PM +0400, Dmitry Guryanov wrote:
> There is a problem with function parallelsDomainDefineXML. If we
> are defining a new domain, then we need to do 2 things: aclually
> create a VM in PCS and add new domain to the cached list of domains
> _parallelsConn.domains.
> 
> This is done in the function parallelsLoadDomains. So call to
> virDomainObjListAdd will return a error, because a domain
> with the same name and id will already be in the list.
> 
> Signed-off-by: Dmitry Guryanov <dguryanov at parallels.com>
> ---
>  src/parallels/parallels_driver.c | 18 +++---------------
>  1 file changed, 3 insertions(+), 15 deletions(-)
> 
> diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c
> index 1c58b45..4ab3e1c 100644
> --- a/src/parallels/parallels_driver.c
> +++ b/src/parallels/parallels_driver.c
> @@ -2303,7 +2303,7 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
>      parallelsConnPtr privconn = conn->privateData;
>      virDomainPtr ret = NULL;
>      virDomainDefPtr def;
> -    virDomainObjPtr dom = NULL, olddom = NULL;
> +    virDomainObjPtr olddom = NULL;
>  
>      parallelsDriverLock(privconn);
>      if ((def = virDomainDefParseString(xml, privconn->caps, privconn->xmlopt,
> @@ -2345,24 +2345,12 @@ parallelsDomainDefineXML(virConnectPtr conn, const char *xml)
>      }
>      virObjectUnlock(olddom);
>  
> -    if (!(dom = virDomainObjListAdd(privconn->domains, def,
> -                                    privconn->xmlopt,
> -                                    0, NULL))) {
> -        virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> -                       _("Can't allocate domobj"));
> -        goto cleanup;
> -    }
> -
> -    def = NULL;
> -
> -    ret = virGetDomain(conn, dom->def->name, dom->def->uuid);
> +    ret = virGetDomain(conn, def->name, def->uuid);
>      if (ret)
> -        ret->id = dom->def->id;
> +        ret->id = def->id;
>  
>   cleanup:
>      virDomainDefFree(def);
> -    if (dom)
> -        virObjectUnlock(dom);
>      parallelsDriverUnlock(privconn);
>      return ret;
>  }

ACK

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list