There are several places in the storage driver where a runtime stateFile is not being unlinked when the pool is shutdown. Move the unlinking to storagePoolSetInactive to fix those locations One minor semantic change is that we no longer fail PoolDestroy if we fail to build the stateFile path string, but I don't think that matters. --- src/storage/storage_driver.c | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 9e97f62..8f8d098 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -89,6 +89,13 @@ storagePoolSetInactive(virStoragePoolObjPtr pool) { bool ret = false; pool->active = false; + char *stateFile; + + stateFile = virFileBuildPath(driver->stateDir, pool->def->name, ".xml"); + if (stateFile) { + unlink(stateFile); + VIR_FREE(stateFile); + } if (pool->configFile == NULL) { virStoragePoolObjRemove(&driver->pools, pool); @@ -112,11 +119,6 @@ storagePoolUpdateState(virStoragePoolObjPtr pool) bool active = false; virStorageBackendPtr backend; bool ret = false; - char *stateFile; - - if (!(stateFile = virFileBuildPath(driver->stateDir, - pool->def->name, ".xml"))) - goto error; if ((backend = virStorageBackendForType(pool->def->type)) == NULL) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -153,12 +155,8 @@ storagePoolUpdateState(virStoragePoolObjPtr pool) pool->active = active; error: - if (!active) { + if (!active) ret = storagePoolSetInactive(pool); - if (stateFile) - unlink(stateFile); - } - VIR_FREE(stateFile); return ret; } @@ -210,8 +208,6 @@ storageDriverAutostartPool(virConnectPtr conn, if (!stateFile || virStoragePoolSaveState(stateFile, pool->def) < 0 || backend->refreshPool(conn, pool) < 0) { - if (stateFile) - unlink(stateFile); if (backend->stopPool) backend->stopPool(conn, pool); virReportError(VIR_ERR_INTERNAL_ERROR, @@ -774,8 +770,6 @@ storagePoolCreateXML(virConnectPtr conn, virStoragePoolObjClearVols(pool); if (!stateFile || virStoragePoolSaveState(stateFile, pool->def) < 0 || backend->refreshPool(conn, pool) < 0) { - if (stateFile) - unlink(stateFile); if (backend->stopPool) backend->stopPool(conn, pool); if (storagePoolSetInactive(pool)) @@ -991,8 +985,6 @@ storagePoolCreate(virStoragePoolPtr obj, virStoragePoolObjClearVols(pool); if (!stateFile || virStoragePoolSaveState(stateFile, pool->def) < 0 || backend->refreshPool(obj->conn, pool) < 0) { - if (stateFile) - unlink(stateFile); if (backend->stopPool) backend->stopPool(obj->conn, pool); @@ -1060,7 +1052,6 @@ storagePoolDestroy(virStoragePoolPtr obj) virStoragePoolObjPtr pool; virStorageBackendPtr backend; virObjectEventPtr event = NULL; - char *stateFile = NULL; int ret = -1; storageDriverLock(); @@ -1094,13 +1085,6 @@ storagePoolDestroy(virStoragePoolPtr obj) goto cleanup; } - if (!(stateFile = virFileBuildPath(driver->stateDir, - pool->def->name, - ".xml"))) - goto cleanup; - - unlink(stateFile); - VIR_FREE(stateFile); if (backend->stopPool && backend->stopPool(obj->conn, pool) < 0) -- 2.7.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list