[libvirt] [PATCH 2/4] Factor out def assignment to existing domain from virDomainAssignDef

Cole Robinson crobinso at redhat.com
Thu May 20 19:03:07 UTC 2010


On 05/20/2010 08:54 AM, Jiri Denemark wrote:
> We need to be able to assign new def to an existing virDomainObj which
> is already locked. This patch factors out the relevant code from
> virDomainAssignDef into virDomainObjAssignDef.
> ---
>  src/conf/domain_conf.c   |   36 +++++++++++++++++++++---------------
>  src/conf/domain_conf.h   |    3 +++
>  src/libvirt_private.syms |    1 +
>  3 files changed, 25 insertions(+), 15 deletions(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 20c9c51..c77ee59 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -808,6 +808,26 @@ static virDomainObjPtr virDomainObjNew(virCapsPtr caps)
>      return domain;
>  }
>  
> +void virDomainObjAssignDef(virDomainObjPtr domain,
> +                           const virDomainDefPtr def,
> +                           bool live)
> +{
> +    if (!virDomainObjIsActive(domain)) {
> +        if (live) {
> +            /* save current configuration to be restored on domain shutdown */
> +            if (!domain->newDef)
> +                domain->newDef = domain->def;
> +            domain->def = def;
> +        } else {
> +            virDomainDefFree(domain->def);
> +            domain->def = def;
> +        }
> +    } else {
> +        virDomainDefFree(domain->newDef);
> +        domain->newDef = def;
> +    }
> +}
> +
>  virDomainObjPtr virDomainAssignDef(virCapsPtr caps,
>                                     virDomainObjListPtr doms,
>                                     const virDomainDefPtr def,
> @@ -817,21 +837,7 @@ virDomainObjPtr virDomainAssignDef(virCapsPtr caps,
>      char uuidstr[VIR_UUID_STRING_BUFLEN];
>  
>      if ((domain = virDomainFindByUUID(doms, def->uuid))) {
> -        if (!virDomainObjIsActive(domain)) {
> -            if (live) {
> -                /* save current configuration to be restored on domain shutdown */
> -                if (!domain->newDef)
> -                    domain->newDef = domain->def;
> -                domain->def = def;
> -            } else {
> -                virDomainDefFree(domain->def);
> -                domain->def = def;
> -            }
> -        } else {
> -            virDomainDefFree(domain->newDef);
> -            domain->newDef = def;
> -        }
> -
> +        virDomainObjAssignDef(domain, def, live);
>          return domain;
>      }
>  
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index a7206d3..9f87fc5 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -954,6 +954,9 @@ virDomainObjPtr virDomainAssignDef(virCapsPtr caps,
>                                     virDomainObjListPtr doms,
>                                     const virDomainDefPtr def,
>                                     bool live);
> +void virDomainObjAssignDef(virDomainObjPtr domain,
> +                           const virDomainDefPtr def,
> +                           bool live);
>  void virDomainRemoveInactive(virDomainObjListPtr doms,
>                               virDomainObjPtr dom);
>  
> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> index bdeab0f..1594a08 100644
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -215,6 +215,7 @@ virDomainSnapshotObjUnref;
>  virDomainSnapshotDefParseString;
>  virDomainSnapshotDefFormat;
>  virDomainSnapshotAssignDef;
> +virDomainObjAssignDef;
>  
>  
>  # domain_event.h

ACK

- Cole




More information about the libvir-list mailing list