diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index e893b2d7a0649da6999f20016b0fc83c40b472d8..4f4f5cea4e235f56f34244370258ee2826480edd 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -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); diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h index d115a152053635c750faee72a439cfdf9673db7b..19bbd2cdca42b819084a2cf86e2288c754f0959e 100644 --- a/src/conf/storage_conf.h +++ b/src/conf/storage_conf.h @@ -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); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 8a6e8d30cf4569c8a2e5efeda6a4e1f89aeab9f6..4ae1157b1b9bab677467f05165fd68391cf9cf15 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -992,14 +992,15 @@ virStoragePoolObjClearVols; virStoragePoolObjDeleteDef; virStoragePoolObjFindByName; virStoragePoolObjFindByUUID; -virStoragePoolSourceFindDuplicateDevices; virStoragePoolObjIsDuplicate; -virStoragePoolSourceFindDuplicate; virStoragePoolObjListFree; virStoragePoolObjLock; virStoragePoolObjRemove; virStoragePoolObjSaveDef; virStoragePoolObjUnlock; +virStoragePoolSourceClear; +virStoragePoolSourceFindDuplicate; +virStoragePoolSourceFindDuplicateDevices; virStoragePoolSourceFree; virStoragePoolSourceListFormat; virStoragePoolSourceListNewSource; diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index d6786259bbc19419c0fc937920bf9d2d87238c9a..3473435c67c8ef6cb3695c266d2b275441604980 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -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; } diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c index c6e782d40bcf2e9dce6f2fd6f7411b1f80f20287..99e69c9a63179c301ce77f1d574e80d190247de3 100644 --- a/src/storage/storage_backend_iscsi.c +++ b/src/storage/storage_backend_iscsi.c @@ -611,7 +611,6 @@ cleanup: VIR_FREE(targets); VIR_FREE(portal); virStoragePoolSourceFree(source); - VIR_FREE(source); return ret; } diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c index 50d0407dcdeed6dba0897cb184619715236194f0..3c3e7363029562a725262aa454761eb522136d84 100644 --- a/src/storage/storage_backend_logical.c +++ b/src/storage/storage_backend_logical.c @@ -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; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index b3e24b45143acd2f0f0ed6980ef7a56e5ee6f86c..326409da0f3f3d96b16a7c9d1253fc1260f3f08d 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -4088,7 +4088,6 @@ testStorageFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED, cleanup: virStoragePoolSourceFree(source); - VIR_FREE(source); return ret; }