Fix misc OOM bugs

* tests/testutils.c: Run test function twice, once to prime it for
  static allocations, once to count the non-static allocations.
* tests/testutilsqemu.c: Initialize variable correctl
* src/capabilities.c: Don't free machines variable upon failure
  since caller must do that
* src/xm_internal.c: Add missing check for OOM in building VIF
  config param
This commit is contained in:
Daniel P. Berrange 2009-09-02 15:09:04 +01:00
parent 4ff6091294
commit 8eacfd4cc2
3 changed files with 20 additions and 12 deletions

View File

@ -354,10 +354,6 @@ virCapabilitiesAddGuest(virCapsPtr caps,
if (loader &&
(guest->arch.defaultInfo.loader = strdup(loader)) == NULL)
goto no_memory;
if (nmachines) {
guest->arch.defaultInfo.nmachines = nmachines;
guest->arch.defaultInfo.machines = machines;
}
if (VIR_REALLOC_N(caps->guests,
caps->nguests + 1) < 0)
@ -365,6 +361,11 @@ virCapabilitiesAddGuest(virCapsPtr caps,
caps->guests[caps->nguests] = guest;
caps->nguests++;
if (nmachines) {
guest->arch.defaultInfo.nmachines = nmachines;
guest->arch.defaultInfo.machines = machines;
}
return guest;
no_memory:
@ -407,10 +408,6 @@ virCapabilitiesAddGuestDomain(virCapsGuestPtr guest,
if (loader &&
(dom->info.loader = strdup(loader)) == NULL)
goto no_memory;
if (nmachines) {
dom->info.nmachines = nmachines;
dom->info.machines = machines;
}
if (VIR_REALLOC_N(guest->arch.domains,
guest->arch.ndomains + 1) < 0)
@ -418,6 +415,10 @@ virCapabilitiesAddGuestDomain(virCapsGuestPtr guest,
guest->arch.domains[guest->arch.ndomains] = dom;
guest->arch.ndomains++;
if (nmachines) {
dom->info.nmachines = nmachines;
dom->info.machines = machines;
}
return dom;

View File

@ -2046,6 +2046,9 @@ static int xenXMDomainConfigFormatNet(virConnectPtr conn,
virBufferVSprintf(&buf, ",vifname=%s",
net->ifname);
if (virBufferError(&buf))
goto cleanup;
if (VIR_ALLOC(val) < 0) {
virReportOOMError(conn);
goto cleanup;

View File

@ -367,10 +367,7 @@ int virtTestMain(int argc,
}
}
if (testOOM)
virAllocTestInit();
/* Run once to count allocs, and ensure it passes :-) */
/* Run once to prime any static allocations & ensure it passes */
ret = (func)(argc, argv);
if (ret != EXIT_SUCCESS)
goto cleanup;
@ -385,6 +382,13 @@ int virtTestMain(int argc,
testOOM++;
virSetErrorFunc(NULL, virtTestErrorFuncQuiet);
virAllocTestInit();
/* Run again to count allocs, and ensure it passes :-) */
ret = (func)(argc, argv);
if (ret != EXIT_SUCCESS)
goto cleanup;
approxAlloc = virAllocTestCount();
testCounter++;
if (testDebug)