qemu: Fix memory leak on metadata fetching

As written in virStorageFileGetMetadataFromFD decription, caller
must free metadata after use. Qemu driver miss this and therefore
leak metadata which can grow to huge mem leak if somebody query
for blockInfo a lot.
This commit is contained in:
Michal Privoznik 2011-07-28 15:42:57 +02:00
parent c6a4c375fb
commit 09d7eba99d

View File

@ -6949,7 +6949,7 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom,
int ret = -1;
int fd = -1;
off_t end;
virStorageFileMetadata meta;
virStorageFileMetadata *meta = NULL;
virDomainDiskDefPtr disk = NULL;
struct stat sb;
int i;
@ -7017,9 +7017,14 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom,
}
}
if (VIR_ALLOC(meta) < 0) {
virReportOOMError();
goto cleanup;
}
if (virStorageFileGetMetadataFromFD(path, fd,
format,
&meta) < 0)
meta) < 0)
goto cleanup;
/* Get info for normal formats */
@ -7056,8 +7061,8 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom,
/* If the file we probed has a capacity set, then override
* what we calculated from file/block extents */
if (meta.capacity)
info->capacity = meta.capacity;
if (meta->capacity)
info->capacity = meta->capacity;
/* Set default value .. */
info->allocation = info->physical;
@ -7091,6 +7096,7 @@ static int qemuDomainGetBlockInfo(virDomainPtr dom,
}
cleanup:
virStorageFileFreeMetadata(meta);
VIR_FORCE_CLOSE(fd);
if (vm)
virDomainObjUnlock(vm);