提交 4b2e0ed6 编写于 作者: J John Ferlan

storage: Convert virStoragePoolObjList to use virObjectRWLockable

Now that we have a private storage pool list, we can take the next
step and convert to using objects. In this case, we're going to use
RWLockable objects (just like every other driver) with two hash
tables for lookup by UUID or Name.

Along the way the ForEach and Search API's will be adjusted to use
the related Hash API's and the various FindBy functions altered and
augmented to allow for HashLookup w/ and w/o the pool lock already
taken.

After virStoragePoolObjRemove we will need to virObjectUnref(obj)
after to indicate the caller is "done" with it's reference. The
Unlock occurs during the Remove.

The NumOf, GetNames, and Export functions all have their own callback
functions to return the required data and the FindDuplicate code
can use the HashSearch function callbacks.
上级 90e65353
此差异已折叠。
......@@ -219,9 +219,6 @@ virStoragePoolObjGetNames(virStoragePoolObjListPtr pools,
void
virStoragePoolObjFree(virStoragePoolObjPtr obj);
void
virStoragePoolObjListFree(virStoragePoolObjListPtr pools);
typedef void
(*virStoragePoolObjListIterator)(virStoragePoolObjPtr obj,
const void *opaque);
......
......@@ -1095,7 +1095,6 @@ virStoragePoolObjIsAutostart;
virStoragePoolObjIsDuplicate;
virStoragePoolObjListExport;
virStoragePoolObjListForEach;
virStoragePoolObjListFree;
virStoragePoolObjListNew;
virStoragePoolObjListSearch;
virStoragePoolObjLoadAllConfigs;
......
......@@ -94,6 +94,7 @@ virStoragePoolUpdateInactive(virStoragePoolObjPtr *objptr)
if (!virStoragePoolObjGetConfigFile(obj)) {
virStoragePoolObjRemove(driver->pools, obj);
virObjectUnref(obj);
*objptr = NULL;
} else if (virStoragePoolObjGetNewDef(obj)) {
virStoragePoolObjDefUseNewDef(obj);
......@@ -375,7 +376,7 @@ storageStateCleanup(void)
virObjectUnref(driver->storageEventState);
/* free inactive pools */
virStoragePoolObjListFree(driver->pools);
virObjectUnref(driver->pools);
VIR_FREE(driver->configDir);
VIR_FREE(driver->autostartDir);
......@@ -713,6 +714,7 @@ storagePoolCreateXML(virConnectPtr conn,
(flags & VIR_STORAGE_POOL_CREATE_WITH_BUILD)) {
if (backend->buildPool(conn, obj, build_flags) < 0) {
virStoragePoolObjRemove(driver->pools, obj);
virObjectUnref(obj);
obj = NULL;
goto cleanup;
}
......@@ -722,6 +724,7 @@ storagePoolCreateXML(virConnectPtr conn,
if (backend->startPool &&
backend->startPool(conn, obj) < 0) {
virStoragePoolObjRemove(driver->pools, obj);
virObjectUnref(obj);
obj = NULL;
goto cleanup;
}
......@@ -736,6 +739,7 @@ storagePoolCreateXML(virConnectPtr conn,
if (backend->stopPool)
backend->stopPool(conn, obj);
virStoragePoolObjRemove(driver->pools, obj);
virObjectUnref(obj);
obj = NULL;
goto cleanup;
}
......@@ -799,6 +803,7 @@ storagePoolDefineXML(virConnectPtr conn,
if (virStoragePoolObjSaveDef(driver, obj, def) < 0) {
virStoragePoolObjRemove(driver->pools, obj);
virObjectUnref(obj);
obj = NULL;
goto cleanup;
}
......@@ -868,6 +873,7 @@ storagePoolUndefine(virStoragePoolPtr pool)
VIR_INFO("Undefining storage pool '%s'", def->name);
virStoragePoolObjRemove(driver->pools, obj);
virObjectUnref(obj);
obj = NULL;
ret = 0;
......
......@@ -155,7 +155,7 @@ testDriverFree(testDriverPtr driver)
virNodeDeviceObjListFree(driver->devs);
virObjectUnref(driver->networks);
virObjectUnref(driver->ifaces);
virStoragePoolObjListFree(driver->pools);
virObjectUnref(driver->pools);
virObjectUnref(driver->eventState);
virMutexUnlock(&driver->lock);
virMutexDestroy(&driver->lock);
......@@ -4463,6 +4463,7 @@ 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;
}
......@@ -4470,6 +4471,7 @@ testStoragePoolCreateXML(virConnectPtr conn,
if (testStoragePoolObjSetDefaults(obj) == -1) {
virStoragePoolObjRemove(privconn->pools, obj);
virObjectUnref(obj);
obj = NULL;
goto cleanup;
}
......@@ -4529,6 +4531,7 @@ testStoragePoolDefineXML(virConnectPtr conn,
if (testStoragePoolObjSetDefaults(obj) == -1) {
virStoragePoolObjRemove(privconn->pools, obj);
virObjectUnref(obj);
obj = NULL;
goto cleanup;
}
......@@ -4559,6 +4562,7 @@ testStoragePoolUndefine(virStoragePoolPtr pool)
0);
virStoragePoolObjRemove(privconn->pools, obj);
virObjectUnref(obj);
testObjectEventQueue(privconn, event);
return 0;
......@@ -4652,6 +4656,7 @@ testStoragePoolDestroy(virStoragePoolPtr pool)
if (!(virStoragePoolObjGetConfigFile(obj))) {
virStoragePoolObjRemove(privconn->pools, obj);
virObjectUnref(obj);
obj = NULL;
}
ret = 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册