From: Cole Robinson Date: Mon, 27 Apr 2015 14:43:22 +0000 (-0400) Subject: storage: Don't leave stale state file if pool startup fails X-Git-Tag: v1.2.15-rc2~26 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c180a3dcf7c3f5ae640629b1b14f89357d6a4547;p=thirdparty%2Flibvirt.git storage: Don't leave stale state file if pool startup fails After pool startup we call refreshPool(). If that fails, we leave a stale pool state file hanging around. Hit this trying to create a pool with qemu:///session containing root owned files. --- diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index 3b7746b993..06686bf674 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -180,6 +180,8 @@ storageDriverAutostart(void) virStoragePoolSaveState(stateFile, pool->def) < 0 || backend->refreshPool(conn, pool) < 0) { virErrorPtr err = virGetLastError(); + if (stateFile) + unlink(stateFile); if (backend->stopPool) backend->stopPool(conn, pool); VIR_ERROR(_("Failed to autostart storage pool '%s': %s"), @@ -690,6 +692,8 @@ storagePoolCreateXML(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); virStoragePoolObjRemove(&driver->pools, pool); @@ -856,6 +860,8 @@ storagePoolCreate(virStoragePoolPtr obj, 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); goto cleanup;