mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
virStoragePoolObjRemove: Don't unlock pool object upon return
The fact that we're removing a pool object from the list of pools doesn't mean we want to unlock it. It violates locking policy too as object locking and unlocking is not done on the same level. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
7cfb7aab57
commit
c63315789f
@ -514,7 +514,6 @@ virStoragePoolObjRemove(virStoragePoolObjListPtr pools,
|
||||
virObjectLock(obj);
|
||||
virHashRemoveEntry(pools->objs, uuidstr);
|
||||
virHashRemoveEntry(pools->objsName, obj->def->name);
|
||||
virObjectUnlock(obj);
|
||||
virObjectUnref(obj);
|
||||
virObjectRWUnlock(pools);
|
||||
}
|
||||
@ -1594,13 +1593,13 @@ virStoragePoolObjLoad(virStoragePoolObjListPtr pools,
|
||||
VIR_FREE(obj->configFile); /* for driver reload */
|
||||
if (VIR_STRDUP(obj->configFile, path) < 0) {
|
||||
virStoragePoolObjRemove(pools, obj);
|
||||
virObjectUnref(obj);
|
||||
virStoragePoolObjEndAPI(&obj);
|
||||
return NULL;
|
||||
}
|
||||
VIR_FREE(obj->autostartLink); /* for driver reload */
|
||||
if (VIR_STRDUP(obj->autostartLink, autostartLink) < 0) {
|
||||
virStoragePoolObjRemove(pools, obj);
|
||||
virObjectUnref(obj);
|
||||
virStoragePoolObjEndAPI(&obj);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -126,8 +126,7 @@ virStoragePoolUpdateInactive(virStoragePoolObjPtr *objptr)
|
||||
|
||||
if (!virStoragePoolObjGetConfigFile(obj)) {
|
||||
virStoragePoolObjRemove(driver->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
*objptr = NULL;
|
||||
virStoragePoolObjEndAPI(objptr);
|
||||
} else if (virStoragePoolObjGetNewDef(obj)) {
|
||||
virStoragePoolObjDefUseNewDef(obj);
|
||||
}
|
||||
@ -771,12 +770,8 @@ storagePoolCreateXML(virConnectPtr conn,
|
||||
|
||||
if (build_flags ||
|
||||
(flags & VIR_STORAGE_POOL_CREATE_WITH_BUILD)) {
|
||||
if (backend->buildPool(obj, build_flags) < 0) {
|
||||
virStoragePoolObjRemove(driver->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
obj = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
if (backend->buildPool(obj, build_flags) < 0)
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
@ -809,8 +804,6 @@ storagePoolCreateXML(virConnectPtr conn,
|
||||
|
||||
error:
|
||||
virStoragePoolObjRemove(driver->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
obj = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@ -846,8 +839,6 @@ storagePoolDefineXML(virConnectPtr conn,
|
||||
|
||||
if (virStoragePoolObjSaveDef(driver, obj, newDef ? newDef : def) < 0) {
|
||||
virStoragePoolObjRemove(driver->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
obj = NULL;
|
||||
newDef = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
@ -914,8 +905,6 @@ storagePoolUndefine(virStoragePoolPtr pool)
|
||||
|
||||
VIR_INFO("Undefining storage pool '%s'", def->name);
|
||||
virStoragePoolObjRemove(driver->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
obj = NULL;
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
|
@ -6450,16 +6450,12 @@ testStoragePoolCreateXML(virConnectPtr conn,
|
||||
def->source.adapter.data.fchost.wwnn,
|
||||
def->source.adapter.data.fchost.wwpn) < 0) {
|
||||
virStoragePoolObjRemove(privconn->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
obj = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
if (testStoragePoolObjSetDefaults(obj) == -1) {
|
||||
virStoragePoolObjRemove(privconn->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
obj = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@ -6517,8 +6513,6 @@ testStoragePoolDefineXML(virConnectPtr conn,
|
||||
|
||||
if (testStoragePoolObjSetDefaults(obj) == -1) {
|
||||
virStoragePoolObjRemove(privconn->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
obj = NULL;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
@ -6547,7 +6541,7 @@ testStoragePoolUndefine(virStoragePoolPtr pool)
|
||||
0);
|
||||
|
||||
virStoragePoolObjRemove(privconn->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
virStoragePoolObjEndAPI(&obj);
|
||||
|
||||
virObjectEventStateQueue(privconn->eventState, event);
|
||||
return 0;
|
||||
@ -6639,11 +6633,9 @@ testStoragePoolDestroy(virStoragePoolPtr pool)
|
||||
VIR_STORAGE_POOL_EVENT_STOPPED,
|
||||
0);
|
||||
|
||||
if (!(virStoragePoolObjGetConfigFile(obj))) {
|
||||
if (!(virStoragePoolObjGetConfigFile(obj)))
|
||||
virStoragePoolObjRemove(privconn->pools, obj);
|
||||
virObjectUnref(obj);
|
||||
obj = NULL;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
|
Loading…
x
Reference in New Issue
Block a user