}
-int
+static int
virStoragePoolObjSourceFindDuplicate(virStoragePoolObjListPtr pools,
virStoragePoolDefPtr def)
{
struct _virStoragePoolObjFindDuplicateData data = {.def = def};
virStoragePoolObjPtr obj = NULL;
- virObjectRWLockRead(pools);
obj = virHashSearch(pools->objs, virStoragePoolObjSourceFindDuplicateCb,
&data, NULL);
- virObjectRWUnlock(pools);
if (obj) {
virReportError(VIR_ERR_OPERATION_FAILED,
virObjectRWLockWrite(pools);
+ if (virStoragePoolObjSourceFindDuplicate(pools, def) < 0)
+ goto error;
+
rc = virStoragePoolObjIsDuplicate(pools, def, check_active, &obj);
if (rc < 0)
virStoragePoolObjRemove(virStoragePoolObjListPtr pools,
virStoragePoolObjPtr obj);
-int
-virStoragePoolObjSourceFindDuplicate(virStoragePoolObjListPtr pools,
- virStoragePoolDefPtr def);
-
int
virStoragePoolObjListExport(virConnectPtr conn,
virStoragePoolObjListPtr poolobjs,
virStoragePoolObjSetAutostart;
virStoragePoolObjSetConfigFile;
virStoragePoolObjSetDef;
-virStoragePoolObjSourceFindDuplicate;
virStoragePoolObjVolumeGetNames;
virStoragePoolObjVolumeListExport;
if (virStoragePoolCreateXMLEnsureACL(conn, newDef) < 0)
goto cleanup;
- if (virStoragePoolObjSourceFindDuplicate(driver->pools, newDef) < 0)
- goto cleanup;
-
if ((backend = virStorageBackendForType(newDef->type)) == NULL)
goto cleanup;
if (virStoragePoolDefineXMLEnsureACL(conn, newDef) < 0)
goto cleanup;
- if (virStoragePoolObjSourceFindDuplicate(driver->pools, newDef) < 0)
- goto cleanup;
-
if (virStorageBackendForType(newDef->type) == NULL)
goto cleanup;