[libvirt] dname parameter ignored in qemudDomainMigratePrepareTunnel{, 2}

Cole Robinson crobinso at redhat.com
Thu Feb 11 16:04:38 UTC 2010


On 02/11/2010 10:52 AM, Jim Meyering wrote:
> clang warned about a dead-store in src/qemu/qemu_driver.c,
> since dname is never used thereafter:
> 
>     http://libvirt.org/git/?p=libvirt.git;a=blob;f=src/qemu/qemu_driver.c;h=0d77d572a49e1c86f86911bce54d93fdb4a38feb;hb=HEAD#l7436
>     /* Target domain name, maybe renamed. */
>     dname = dname ? dname : def->name;
> 
> That stmt was initially added with a following use,
> 
>     if (!vm) vm = virDomainFindByName(&driver->domains, dname);
> 
> But the use was removed by this commit, rendering the store "dead",
> and the dname parameter effectively unused:
> 
>     http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=c26cb9234f4b9fa46d7caa3385ae36704167c53f
> 

Whoops, yeah, I stared at that patch for a few minutes before I saw the
issue. Must have dname blindness.

> The same thing happened in both
> qemudDomainMigratePrepareTunnel and
> qemudDomainMigratePrepareTunnel2
> 
> Shouldn't they be doing something like this instead?
> 
>     if (dname)
>         def->name = dname;
> 
> But def->name is already allocated.  Better free it first.
> And is dname "known" to be allocated from the heap?
> That's not clear from the little documentation I've read so far,
> so I've strdup'd it below:
> 
> Here's a possible patch:
> 
>>From b51a39aed62ee5c8db733cecfe6eef0c34a7f989 Mon Sep 17 00:00:00 2001
> From: Jim Meyering <meyering at redhat.com>
> Date: Thu, 11 Feb 2010 16:46:21 +0100
> Subject: [PATCH] qemu_driver.c: honor dname parameter once again
> 
> Since c26cb9234f4b9fa46d7caa3385ae36704167c53f, the dname
> parameter has been ignored by these two functions.  Use it.
> * src/qemu/qemu_driver.c (qemudDomainMigratePrepareTunnel): Honor dname
> parameter once again.
> (qemudDomainMigratePrepare2): Likewise.
> ---
>  src/qemu/qemu_driver.c |   14 ++++++++++++--
>  1 files changed, 12 insertions(+), 2 deletions(-)
> 
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index 0d77d57..9ff712c 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -7434,7 +7434,12 @@ qemudDomainMigratePrepareTunnel(virConnectPtr dconn,
>      }
> 
>      /* Target domain name, maybe renamed. */
> -    dname = dname ? dname : def->name;
> +    if (dname) {
> +        VIR_FREE(def->name);
> +        def->name = strdup(dname);
> +        if (def->name == NULL)
> +            goto cleanup;
> +    }
> 
>      if (virDomainObjIsDuplicate(&driver->domains, def, 1) < 0)
>          goto cleanup;
> @@ -7660,7 +7665,12 @@ qemudDomainMigratePrepare2 (virConnectPtr dconn,
>      }
> 
>      /* Target domain name, maybe renamed. */
> -    dname = dname ? dname : def->name;
> +    if (dname) {
> +        VIR_FREE(def->name);
> +        def->name = strdup(dname);
> +        if (def->name == NULL)
> +            goto cleanup;
> +    }
> 
>      if (virDomainObjIsDuplicate(&driver->domains, def, 1) < 0)
>          goto cleanup;

Yes, I think this works. The 'def' here is actually from XML passed to
the destination migration host: its _not_ the def of an existing VM, so
just swapping out name like that should be okay.

ACK.

Thanks,
Cole




More information about the libvir-list mailing list