mirror of https://gitee.com/openkylin/libvirt.git
storage: Resolve resource leaks with cmd processing
This commit is contained in:
parent
1c8c819028
commit
ede91bde83
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* storage_backend_disk.c: storage backend for disk handling
|
* storage_backend_disk.c: storage backend for disk handling
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007-2008, 2010-2012 Red Hat, Inc.
|
* Copyright (C) 2007-2008, 2010-2013 Red Hat, Inc.
|
||||||
* Copyright (C) 2007-2008 Daniel P. Berrange
|
* Copyright (C) 2007-2008 Daniel P. Berrange
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
|
@ -385,14 +385,7 @@ virStorageBackendDiskBuildPool(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
{
|
{
|
||||||
bool ok_to_mklabel = false;
|
bool ok_to_mklabel = false;
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
/* eg parted /dev/sda mklabel msdos */
|
virCommandPtr cmd = NULL;
|
||||||
virCommandPtr cmd = virCommandNewArgList(PARTED,
|
|
||||||
pool->def->source.devices[0].path,
|
|
||||||
"mklabel",
|
|
||||||
"--script",
|
|
||||||
((pool->def->source.format == VIR_STORAGE_POOL_DISK_DOS) ? "msdos" :
|
|
||||||
virStoragePoolFormatDiskTypeToString(pool->def->source.format)),
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
virCheckFlags(VIR_STORAGE_POOL_BUILD_OVERWRITE |
|
virCheckFlags(VIR_STORAGE_POOL_BUILD_OVERWRITE |
|
||||||
VIR_STORAGE_POOL_BUILD_NO_OVERWRITE, ret);
|
VIR_STORAGE_POOL_BUILD_NO_OVERWRITE, ret);
|
||||||
|
@ -423,8 +416,17 @@ virStorageBackendDiskBuildPool(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ok_to_mklabel)
|
if (ok_to_mklabel) {
|
||||||
|
/* eg parted /dev/sda mklabel msdos */
|
||||||
|
cmd = virCommandNewArgList(PARTED,
|
||||||
|
pool->def->source.devices[0].path,
|
||||||
|
"mklabel",
|
||||||
|
"--script",
|
||||||
|
((pool->def->source.format == VIR_STORAGE_POOL_DISK_DOS) ? "msdos" :
|
||||||
|
virStoragePoolFormatDiskTypeToString(pool->def->source.format)),
|
||||||
|
NULL);
|
||||||
ret = virCommandRun(cmd, NULL);
|
ret = virCommandRun(cmd, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
error:
|
error:
|
||||||
virCommandFree(cmd);
|
virCommandFree(cmd);
|
||||||
|
@ -634,7 +636,7 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
virStorageVolDefPtr vol)
|
virStorageVolDefPtr vol)
|
||||||
{
|
{
|
||||||
int res = -1;
|
int res = -1;
|
||||||
char *partFormat;
|
char *partFormat = NULL;
|
||||||
unsigned long long startOffset = 0, endOffset = 0;
|
unsigned long long startOffset = 0, endOffset = 0;
|
||||||
virCommandPtr cmd = virCommandNewArgList(PARTED,
|
virCommandPtr cmd = virCommandNewArgList(PARTED,
|
||||||
pool->def->source.devices[0].path,
|
pool->def->source.devices[0].path,
|
||||||
|
@ -646,11 +648,11 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
"%s", _("storage pool does not support encrypted "
|
"%s", _("storage pool does not support encrypted "
|
||||||
"volumes"));
|
"volumes"));
|
||||||
return -1;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (virStorageBackendDiskPartFormat(pool, vol, &partFormat) != 0) {
|
if (virStorageBackendDiskPartFormat(pool, vol, &partFormat) != 0) {
|
||||||
return -1;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
virCommandAddArg(cmd, partFormat);
|
virCommandAddArg(cmd, partFormat);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue