]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Don't overwrite errors in qemuTranslateDiskSourcePool
authorJán Tomko <jtomko@redhat.com>
Wed, 24 Jul 2013 08:38:20 +0000 (10:38 +0200)
committerJán Tomko <jtomko@redhat.com>
Thu, 25 Jul 2013 11:12:22 +0000 (13:12 +0200)
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

index 3e7b78a30fbabe5fbed54c5f346af95c7fe0dc62..18e926cc60f0fe74d43edd6bd17315123ec38513 100644 (file)
@@ -1248,6 +1248,7 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
     char *poolxml = NULL;
     virStorageVolInfo info;
     int ret = -1;
+    virErrorPtr savedError = NULL;
 
     if (def->type != VIR_DOMAIN_DISK_TYPE_VOLUME)
         return 0;
@@ -1324,8 +1325,17 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
     def->srcpool->voltype = info.type;
     ret = 0;
 cleanup:
-    virStoragePoolFree(pool);
-    virStorageVolFree(vol);
+    if (ret < 0)
+        savedError = virSaveLastError();
+    if (pool)
+        virStoragePoolFree(pool);
+    if (vol)
+        virStorageVolFree(vol);
+    if (savedError) {
+        virSetError(savedError);
+        virFreeError(savedError);
+    }
+
     VIR_FREE(poolxml);
     virStoragePoolDefFree(pooldef);
     return ret;