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

View File

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

View File

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