]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: make previous leak less likely to regress
authorEric Blake <eblake@redhat.com>
Fri, 21 Oct 2011 22:44:52 +0000 (16:44 -0600)
committerEric Blake <eblake@redhat.com>
Tue, 25 Oct 2011 01:42:49 +0000 (19:42 -0600)
Splitting into two functions allows the user to call the right
function, rather than having to remember that a *Free function is
an exception to the rule.

* src/conf/storage_conf.h (virStoragePoolSourceClear): New function.
* src/libvirt_private.syms (storage_conf.h): Export it.
* src/conf/storage_conf.c (virStoragePoolSourceFree): Split...
(virStoragePoolSourceClear): ...into new function.
(virStoragePoolDefFree, virStoragePoolDefParseSourceString):
Update callers.
* src/test/test_driver.c (testStorageFindPoolSources): Likewise.
* src/storage/storage_backend_fs.c
(virStorageBackendFileSystemNetFindPoolSourcesFunc)
(virStorageBackendFileSystemNetFindPoolSources): Likewise.
* src/storage/storage_backend_iscsi.c
(virStorageBackendISCSIFindPoolSources): Likewise.
* src/storage/storage_backend_logical.c
(virStorageBackendLogicalFindPoolSources): Likewise.

src/conf/storage_conf.c
src/conf/storage_conf.h
src/libvirt_private.syms
src/storage/storage_backend_fs.c
src/storage/storage_backend_iscsi.c
src/storage/storage_backend_logical.c
src/test/test_driver.c

index e893b2d7a0649da6999f20016b0fc83c40b472d8..4f4f5cea4e235f56f34244370258ee2826480edd 100644 (file)
@@ -269,7 +269,8 @@ virStorageVolDefFree(virStorageVolDefPtr def) {
 }
 
 void
-virStoragePoolSourceFree(virStoragePoolSourcePtr source) {
+virStoragePoolSourceClear(virStoragePoolSourcePtr source)
+{
     int i;
 
     if (!source)
@@ -294,6 +295,13 @@ virStoragePoolSourceFree(virStoragePoolSourcePtr source) {
     }
 }
 
+void
+virStoragePoolSourceFree(virStoragePoolSourcePtr source)
+{
+    virStoragePoolSourceClear(source);
+    VIR_FREE(source);
+}
+
 void
 virStoragePoolDefFree(virStoragePoolDefPtr def) {
     if (!def)
@@ -301,7 +309,7 @@ virStoragePoolDefFree(virStoragePoolDefPtr def) {
 
     VIR_FREE(def->name);
 
-    virStoragePoolSourceFree(&def->source);
+    virStoragePoolSourceClear(&def->source);
 
     VIR_FREE(def->target.path);
     VIR_FREE(def->target.perms.label);
@@ -529,7 +537,6 @@ virStoragePoolDefParseSourceString(const char *srcSpec,
     def = NULL;
 cleanup:
     virStoragePoolSourceFree(def);
-    VIR_FREE(def);
     xmlFreeDoc(doc);
     xmlXPathFreeContext(xpath_ctxt);
 
index d115a152053635c750faee72a439cfdf9673db7b..19bbd2cdca42b819084a2cf86e2288c754f0959e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * storage_conf.h: config handling for storage driver
  *
- * Copyright (C) 2006-2008, 2010 Red Hat, Inc.
+ * Copyright (C) 2006-2008, 2010-2011 Red Hat, Inc.
  * Copyright (C) 2006-2008 Daniel P. Berrange
  *
  * This library is free software; you can redistribute it and/or
@@ -372,6 +372,7 @@ int virStoragePoolObjSaveDef(virStorageDriverStatePtr driver,
 int virStoragePoolObjDeleteDef(virStoragePoolObjPtr pool);
 
 void virStorageVolDefFree(virStorageVolDefPtr def);
+void virStoragePoolSourceClear(virStoragePoolSourcePtr source);
 void virStoragePoolSourceFree(virStoragePoolSourcePtr source);
 void virStoragePoolDefFree(virStoragePoolDefPtr def);
 void virStoragePoolObjFree(virStoragePoolObjPtr pool);
index 8a6e8d30cf4569c8a2e5efeda6a4e1f89aeab9f6..4ae1157b1b9bab677467f05165fd68391cf9cf15 100644 (file)
@@ -992,14 +992,15 @@ virStoragePoolObjClearVols;
 virStoragePoolObjDeleteDef;
 virStoragePoolObjFindByName;
 virStoragePoolObjFindByUUID;
-virStoragePoolSourceFindDuplicateDevices;
 virStoragePoolObjIsDuplicate;
-virStoragePoolSourceFindDuplicate;
 virStoragePoolObjListFree;
 virStoragePoolObjLock;
 virStoragePoolObjRemove;
 virStoragePoolObjSaveDef;
 virStoragePoolObjUnlock;
+virStoragePoolSourceClear;
+virStoragePoolSourceFindDuplicate;
+virStoragePoolSourceFindDuplicateDevices;
 virStoragePoolSourceFree;
 virStoragePoolSourceListFormat;
 virStoragePoolSourceListNewSource;
index d6786259bbc19419c0fc937920bf9d2d87238c9a..3473435c67c8ef6cb3695c266d2b275441604980 100644 (file)
@@ -217,7 +217,6 @@ virStorageBackendFileSystemNetFindPoolSourcesFunc(virStoragePoolObjPtr pool ATTR
     ret = 0;
 cleanup:
     virStoragePoolSourceFree(src);
-    VIR_FREE(src);
     return ret;
 }
 
@@ -277,12 +276,10 @@ virStorageBackendFileSystemNetFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSE
 
  cleanup:
     for (i = 0; i < state.list.nsources; i++)
-        virStoragePoolSourceFree(&state.list.sources[i]);
+        virStoragePoolSourceClear(&state.list.sources[i]);
+    VIR_FREE(state.list.sources);
 
     virStoragePoolSourceFree(source);
-    VIR_FREE(source);
-
-    VIR_FREE(state.list.sources);
 
     return retval;
 }
index c6e782d40bcf2e9dce6f2fd6f7411b1f80f20287..99e69c9a63179c301ce77f1d574e80d190247de3 100644 (file)
@@ -611,7 +611,6 @@ cleanup:
     VIR_FREE(targets);
     VIR_FREE(portal);
     virStoragePoolSourceFree(source);
-    VIR_FREE(source);
     return ret;
 }
 
index 50d0407dcdeed6dba0897cb184619715236194f0..3c3e7363029562a725262aa454761eb522136d84 100644 (file)
@@ -430,8 +430,7 @@ virStorageBackendLogicalFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
 
  cleanup:
     for (i = 0; i < sourceList.nsources; i++)
-        virStoragePoolSourceFree(&sourceList.sources[i]);
-
+        virStoragePoolSourceClear(&sourceList.sources[i]);
     VIR_FREE(sourceList.sources);
 
     return retval;
index b3e24b45143acd2f0f0ed6980ef7a56e5ee6f86c..326409da0f3f3d96b16a7c9d1253fc1260f3f08d 100644 (file)
@@ -4088,7 +4088,6 @@ testStorageFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED,
 
 cleanup:
     virStoragePoolSourceFree(source);
-    VIR_FREE(source);
     return ret;
 }