if (virStoragePoolObjIsAutostart(obj) &&
!virStoragePoolObjIsActive(obj)) {
+
+ virStoragePoolObjSetStarting(obj, true);
if (backend->startPool &&
backend->startPool(obj) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Failed to autostart storage pool '%s': %s"),
def->name, virGetLastErrorMessage());
- return;
+ goto cleanup;
}
started = true;
}
virStoragePoolObjSetActive(obj, true);
}
}
+
+ cleanup:
+ if (virStoragePoolObjIsStarting(obj)) {
+ if (!virStoragePoolObjIsActive(obj))
+ virStoragePoolUpdateInactive(obj);
+ virStoragePoolObjSetStarting(obj, false);
+ }
}
newDef = NULL;
def = virStoragePoolObjGetDef(obj);
+ virStoragePoolObjSetStarting(obj, true);
+
if (backend->buildPool) {
if (flags & VIR_STORAGE_POOL_CREATE_WITH_BUILD_OVERWRITE)
build_flags |= VIR_STORAGE_POOL_BUILD_OVERWRITE;
pool = virGetStoragePool(conn, def->name, def->uuid, NULL, NULL);
cleanup:
+ if (virStoragePoolObjIsStarting(obj)) {
+ if (!virStoragePoolObjIsActive(obj))
+ virStoragePoolUpdateInactive(obj);
+ virStoragePoolObjSetStarting(obj, false);
+ }
virObjectEventStateQueue(driver->storageEventState, event);
virStoragePoolObjEndAPI(&obj);
return pool;
goto cleanup;
}
+ if (virStoragePoolObjIsStarting(obj)) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("storage pool '%s' is starting up"),
+ def->name);
+ goto cleanup;
+ }
+
if (virStoragePoolObjGetAsyncjobs(obj) > 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("pool '%s' has asynchronous jobs running."),
int ret = -1;
unsigned int build_flags = 0;
VIR_AUTOFREE(char *) stateFile = NULL;
+ bool restoreStarting = false;
virCheckFlags(VIR_STORAGE_POOL_CREATE_WITH_BUILD |
VIR_STORAGE_POOL_CREATE_WITH_BUILD_OVERWRITE |
goto cleanup;
}
+ if (virStoragePoolObjIsStarting(obj)) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("storage pool '%s' is starting up"),
+ def->name);
+ goto cleanup;
+ }
+
+ virStoragePoolObjSetStarting(obj, true);
+ restoreStarting = true;
+
if (backend->buildPool) {
if (flags & VIR_STORAGE_POOL_CREATE_WITH_BUILD_OVERWRITE)
build_flags |= VIR_STORAGE_POOL_BUILD_OVERWRITE;
ret = 0;
cleanup:
+ if (restoreStarting &&
+ virStoragePoolObjIsStarting(obj)) {
+ if (!virStoragePoolObjIsActive(obj))
+ virStoragePoolUpdateInactive(obj);
+ virStoragePoolObjSetStarting(obj, false);
+ }
virObjectEventStateQueue(driver->storageEventState, event);
virStoragePoolObjEndAPI(&obj);
return ret;
virStoragePoolDefPtr def;
virStorageBackendPtr backend;
virObjectEventPtr event = NULL;
+ bool restoreStarting = false;
int ret = -1;
if (!(obj = virStoragePoolObjFromStoragePool(pool)))
goto cleanup;
}
+ if (virStoragePoolObjIsStarting(obj)) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("storage pool '%s' is starting up"),
+ def->name);
+ goto cleanup;
+ }
+
+ virStoragePoolObjSetStarting(obj, true);
+ restoreStarting = true;
+
if (backend->buildPool &&
backend->buildPool(obj, flags) < 0)
goto cleanup;
ret = 0;
cleanup:
+ if (restoreStarting &&
+ virStoragePoolObjIsStarting(obj)) {
+ virStoragePoolUpdateInactive(obj);
+ virStoragePoolObjSetStarting(obj, false);
+ }
virObjectEventStateQueue(driver->storageEventState, event);
virStoragePoolObjEndAPI(&obj);
return ret;
goto cleanup;
}
+ if (virStoragePoolObjIsStarting(obj)) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("storage pool '%s' is starting up"),
+ def->name);
+ goto cleanup;
+ }
+
if (virStoragePoolObjGetAsyncjobs(obj) > 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("pool '%s' has asynchronous jobs running."),
goto cleanup;
}
+ if (virStoragePoolObjIsStarting(obj)) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("storage pool '%s' is starting up"),
+ def->name);
+ goto cleanup;
+ }
+
if (virStoragePoolObjGetAsyncjobs(obj) > 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("pool '%s' has asynchronous jobs running."),
goto cleanup;
}
+ if (virStoragePoolObjIsStarting(obj)) {
+ virReportError(VIR_ERR_OPERATION_INVALID,
+ _("storage pool '%s' is starting up"),
+ def->name);
+ goto cleanup;
+ }
+
if (virStoragePoolObjGetAsyncjobs(obj) > 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("pool '%s' has asynchronous jobs running."),