[libvirt] [PATCH] Don't overwrite errors in qemuTranslateDiskSourcePool

Guannan Ren gren at redhat.com
Wed Jul 24 09:21:16 UTC 2013


On 07/24/2013 04:43 PM, Ján Tomko wrote:
> Both virStoragePoolFree and virStorageVolFree reset the last error,
> which might lead to the cryptic message:
> An error occurred, but the cause is unknown
>
> When the volume wasn't found, virStorageVolFree was called with NULL,
> leading to an error:
> invalid storage volume pointer in virStorageVolFree
>
> This patch changes it to:
> Storage volume not found: no storage vol with matching name 'tomato'
> ---
>   src/qemu/qemu_conf.c | 11 +++++++++--
>   1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index 3e7b78a..80b8156 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -1248,6 +1248,7 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
>       char *poolxml = NULL;
>       virStorageVolInfo info;
>       int ret = -1;
> +    virErrorPtr savedError;
>   
>       if (def->type != VIR_DOMAIN_DISK_TYPE_VOLUME)
>           return 0;
> @@ -1324,8 +1325,14 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
>       def->srcpool->voltype = info.type;
>       ret = 0;
>   cleanup:
> -    virStoragePoolFree(pool);
> -    virStorageVolFree(vol);
> +    savedError = virSaveLastError();

It would be better to save error only when ret < 0.
In other place, we use format like this:

if (ret < 0 && !savedError)
     savedError = virSaveLastError();

virStoragePoolFree(pool);
virStorageVolFree(vol);

if (savedError) {
     virSetError(orig_err);
     virFreeError(orig_err);
}

Guannan




More information about the libvir-list mailing list