# HG changeset patch
# User Kaitlin Rupert <karupert(a)us.ibm.com>
# Date 1257545021 28800
# Node ID 280a12d7c513129ebf86ac271aac5474161d3aae
# Parent 910c18bbb6264c90294375e94882e600f3dd8237
Fix memory leaks in RASD, RAFP, and DevicePool
Signed-off-by: Kaitlin Rupert <karupert(a)us.ibm.com>
diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_DevicePool.c
--- a/src/Virt_DevicePool.c Thu Nov 05 14:20:54 2009 -0800
+++ b/src/Virt_DevicePool.c Fri Nov 06 14:03:41 2009 -0800
@@ -102,11 +102,14 @@
return 0;
*pool = malloc(sizeof(**pool));
- if (*pool == NULL)
- return 0;
+ if (*pool == NULL) {
+ ret = 0;
+ goto out;
+ }
ret = get_pool_from_xml(xml, *pool, CIM_RES_TYPE_DISK);
+ out:
free(xml);
return ret;
@@ -130,30 +133,31 @@
goto out;
}
+ if (virConnectListStoragePools(conn, names, count) == -1) {
+ CU_DEBUG("Failed to get storage pools");
+ goto out;
+ }
+
pools = calloc(count, sizeof(*pools));
if (pools == NULL) {
CU_DEBUG("Failed to alloc space for %i pool structs", count);
goto out;
}
- if (virConnectListStoragePools(conn, names, count) == -1) {
- CU_DEBUG("Failed to get storage pools");
- free(pools);
- goto out;
- }
-
for (i = 0; i < count; i++) {
pools[i].tag = names[i];
pools[i].primordial = false;
}
out:
+ for (i = 0; i < count; i++)
+ free(names[i]);
+ free(names);
+
get_disk_parent(&pools, &count);
*_pools = pools;
- free(names);
-
return count;
}
@@ -464,6 +468,8 @@
free(_bridge);
}
+ for (i = 0; i < num; i++)
+ free(networks[i]);
free(networks);
return network;
@@ -870,12 +876,12 @@
}
set_params(inst, CIM_RES_TYPE_NET, id, NULL, cap, false);
- free(id);
free(cap);
- free(bridge);
inst_list_add(list, inst);
out:
+ free(bridge);
+ free(id);
virNetworkFree(network);
return s;
@@ -890,7 +896,7 @@
CMPIStatus s = {CMPI_RC_OK, NULL};
char **netnames = NULL;
int i;
- int nets;
+ int nets = 0;
if (id != NULL) {
return _netpool_for_network(list,
@@ -942,6 +948,8 @@
}
out:
+ for (i = 0; i < nets; i++)
+ free(netnames[i]);
free(netnames);
return s;
@@ -1350,8 +1358,6 @@
break;
}
- inst_list_free(&list);
-
if (inst == NULL) {
cu_statusf(broker, s,
CMPI_RC_ERR_FAILED,
@@ -1362,6 +1368,7 @@
}
out:
+ inst_list_free(&list);
return inst;
}
diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_RASD.c
--- a/src/Virt_RASD.c Thu Nov 05 14:20:54 2009 -0800
+++ b/src/Virt_RASD.c Fri Nov 06 14:03:41 2009 -0800
@@ -407,6 +407,8 @@
CLASSNAME(ref),
base,
NAMESPACE(ref));
+ free(base);
+
if (inst == NULL)
return inst;
@@ -523,6 +525,8 @@
else
*_inst = inst;
+ cleanup_virt_device(dev);
+
out:
virConnectClose(conn);
free(host);
@@ -696,6 +700,10 @@
cu_statusf(broker, &s,
CMPI_RC_ERR_FAILED,
"Failed to get domain name");
+
+ for (i = 0; i < count; i++)
+ cleanup_virt_device(&devs[i]);
+
goto out;
}
diff -r 910c18bbb626 -r 280a12d7c513 src/Virt_ResourceAllocationFromPool.c
--- a/src/Virt_ResourceAllocationFromPool.c Thu Nov 05 14:20:54 2009 -0800
+++ b/src/Virt_ResourceAllocationFromPool.c Fri Nov 06 14:03:41 2009 -0800
@@ -120,6 +120,8 @@
inst_list_add(dest, inst);
}
+ free(poolid);
+
return dest->cur;
}