On 10/20/2010 03:29 PM, Eric Blake wrote:
* tools/virsh.c (cmdMemtune): Use long long for memory sizes. Simplify allocation, and plug memory leak. --- No need to cripple virsh with a 32-bit limit. Change from v1: fix compilation failure, rebase on top of other recent memtune fixes tools/virsh.c | 19 ++++++++----------- 1 files changed, 8 insertions(+), 11 deletions(-) diff --git a/tools/virsh.c b/tools/virsh.c index ca9a61e..6a11a7a 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -2905,7 +2905,7 @@ static int cmdMemtune(vshControl * ctl, const vshCmd * cmd) { virDomainPtr dom; - int hard_limit, soft_limit, swap_hard_limit, min_guarantee; + long long hard_limit, soft_limit, swap_hard_limit, min_guarantee; int nparams = 0; unsigned int i = 0; virMemoryParameterPtr params = NULL, temp = NULL; @@ -2918,24 +2918,22 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd) return FALSE; hard_limit = - vshCommandOptInt(cmd, VIR_DOMAIN_MEMORY_HARD_LIMIT,&hard_limit); + vshCommandOptLongLong(cmd, VIR_DOMAIN_MEMORY_HARD_LIMIT, NULL); if (hard_limit) nparams++; soft_limit = - vshCommandOptInt(cmd, VIR_DOMAIN_MEMORY_SOFT_LIMIT,&soft_limit); + vshCommandOptLongLong(cmd, VIR_DOMAIN_MEMORY_SOFT_LIMIT, NULL); if (soft_limit) nparams++; swap_hard_limit = - vshCommandOptInt(cmd, VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT, -&swap_hard_limit); + vshCommandOptLongLong(cmd, VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT, NULL); if (swap_hard_limit) nparams++; min_guarantee = - vshCommandOptInt(cmd, VIR_DOMAIN_MEMORY_MIN_GUARANTEE, -&min_guarantee); + vshCommandOptLongLong(cmd, VIR_DOMAIN_MEMORY_MIN_GUARANTEE, NULL); if (min_guarantee) nparams++; @@ -2954,8 +2952,7 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd) } /* now go get all the memory parameters */ - params = vshMalloc(ctl, sizeof(virMemoryParameter) * nparams); - memset(params, 0, sizeof(virMemoryParameter) * nparams); + params = vshCalloc(ctl, nparams, sizeof(*params)); if (virDomainGetMemoryParameters(dom, params,&nparams, 0) != 0) { vshError(ctl, "%s", _("Unable to get memory parameters")); goto cleanup; @@ -2995,9 +2992,8 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd) ret = TRUE; } else { /* set the memory parameters */ - params = vshMalloc(ctl, sizeof(virMemoryParameter) * nparams); + params = vshCalloc(ctl, nparams, sizeof(*params)); - memset(params, 0, sizeof(virMemoryParameter) * nparams); for (i = 0; i< nparams; i++) { temp =¶ms[i]; temp->type = VIR_DOMAIN_MEMORY_PARAM_ULLONG; @@ -3037,6 +3033,7 @@ cmdMemtune(vshControl * ctl, const vshCmd * cmd) } cleanup: + VIR_FREE(params); virDomainFree(dom); return ret; }
ACK. Stefan -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list