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'
char *poolxml = NULL;
virStorageVolInfo info;
int ret = -1;
+ virErrorPtr savedError = NULL;
if (def->type != VIR_DOMAIN_DISK_TYPE_VOLUME)
return 0;
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;