#define MAX_CELLS 128
struct _testConn {
+ PTHREAD_MUTEX_T(lock);
+
char path[PATH_MAX];
int nextDomID;
virCapsPtr caps;
virReportErrorHelper(conn, VIR_FROM_TEST, code, __FILE__, \
__FUNCTION__, __LINE__, fmt)
+static void testDriverLock(testConnPtr driver)
+{
+ pthread_mutex_lock(&driver->lock);
+}
+
+static void testDriverUnlock(testConnPtr driver)
+{
+ pthread_mutex_unlock(&driver->lock);
+}
+
static virCapsPtr
testBuildCapabilities(virConnectPtr conn) {
testConnPtr privconn = conn->privateData;
return VIR_DRV_OPEN_ERROR;
}
conn->privateData = privconn;
+ pthread_mutex_init(&privconn->lock, NULL);
+ testDriverLock(privconn);
if (gettimeofday(&tv, NULL) < 0) {
testError(NULL, VIR_ERR_INTERNAL_ERROR, "%s", _("getting time of day"));
domobj->def->id = privconn->nextDomID++;
domobj->state = VIR_DOMAIN_RUNNING;
domobj->persistent = 1;
+ virDomainObjUnlock(domobj);
if (!(netdef = virNetworkDefParseString(conn, defaultNetworkXML)))
goto error;
}
netobj->active = 1;
netobj->persistent = 1;
+ virNetworkObjUnlock(netobj);
if (!(pooldef = virStoragePoolDefParse(conn, defaultPoolXML, NULL)))
goto error;
virStoragePoolDefFree(pooldef);
goto error;
}
- if (testStoragePoolObjSetDefaults(poolobj) == -1)
+
+ if (testStoragePoolObjSetDefaults(poolobj) == -1) {
+ virStoragePoolObjUnlock(poolobj);
goto error;
+ }
poolobj->active = 1;
+ virStoragePoolObjUnlock(poolobj);
+ testDriverUnlock(privconn);
return VIR_DRV_OPEN_SUCCESS;
error:
virNetworkObjListFree(&privconn->networks);
virStoragePoolObjListFree(&privconn->pools);
virCapabilitiesFree(privconn->caps);
+ testDriverUnlock(privconn);
VIR_FREE(privconn);
return VIR_DRV_OPEN_ERROR;
}
return VIR_DRV_OPEN_ERROR;
}
conn->privateData = privconn;
+ pthread_mutex_init(&privconn->lock, NULL);
+ testDriverLock(privconn);
if (!(privconn->caps = testBuildCapabilities(conn)))
goto error;
dom->state = VIR_DOMAIN_RUNNING;
dom->def->id = privconn->nextDomID++;
dom->persistent = 1;
+ virDomainObjUnlock(dom);
}
if (domains != NULL)
VIR_FREE(domains);
virNetworkDefFree(def);
goto error;
}
-
net->persistent = 1;
+ virNetworkObjUnlock(net);
}
if (networks != NULL)
VIR_FREE(networks);
goto error;
}
- if (testStoragePoolObjSetDefaults(pool) == -1)
+ if (testStoragePoolObjSetDefaults(pool) == -1) {
+ virStoragePoolObjUnlock(pool);
goto error;
+ }
pool->active = 1;
+ virStoragePoolObjUnlock(pool);
}
if (pools != NULL)
VIR_FREE(pools);
xmlXPathFreeContext(ctxt);
xmlFreeDoc(xml);
+ testDriverUnlock(privconn);
return (0);
virDomainObjListFree(&privconn->domains);
virNetworkObjListFree(&privconn->networks);
virStoragePoolObjListFree(&privconn->pools);
+ testDriverUnlock(privconn);
VIR_FREE(privconn);
conn->privateData = NULL;
return VIR_DRV_OPEN_ERROR;
static int testClose(virConnectPtr conn)
{
testConnPtr privconn = conn->privateData;
-
+ testDriverLock(privconn);
virCapabilitiesFree(privconn->caps);
virDomainObjListFree(&privconn->domains);
virNetworkObjListFree(&privconn->networks);
virStoragePoolObjListFree(&privconn->pools);
+ testDriverUnlock(privconn);
VIR_FREE (privconn);
conn->privateData = NULL;
virNodeInfoPtr info)
{
testConnPtr privconn = conn->privateData;
-
+ testDriverLock(privconn);
memcpy(info, &privconn->nodeInfo, sizeof(virNodeInfo));
+ testDriverUnlock(privconn);
return (0);
}
{
testConnPtr privconn = conn->privateData;
char *xml;
-
+ testDriverLock(privconn);
if ((xml = virCapabilitiesFormatXML(privconn->caps)) == NULL)
testError(conn, VIR_ERR_NO_MEMORY, NULL);
-
+ testDriverUnlock(privconn);
return xml;
}
testConnPtr privconn = conn->privateData;
unsigned int numActive = 0, i;
+ testDriverLock(privconn);
for (i = 0 ; i < privconn->domains.count ; i++)
if (virDomainIsActive(privconn->domains.objs[i]))
numActive++;
+ testDriverUnlock(privconn);
return numActive;
}
testConnPtr privconn = conn->privateData;
virDomainPtr ret = NULL;
virDomainDefPtr def;
- virDomainObjPtr dom;
+ virDomainObjPtr dom = NULL;
+ testDriverLock(privconn);
if ((def = virDomainDefParseString(conn, privconn->caps, xml)) == NULL)
goto cleanup;
ret->id = def->id;
cleanup:
+ if (dom)
+ virDomainObjUnlock(dom);
+ testDriverUnlock(privconn);
return ret;
}
virDomainPtr ret = NULL;
virDomainObjPtr dom;
- if ((dom = virDomainFindByID(&privconn->domains, id)) == NULL) {
+ testDriverLock(privconn);
+ dom = virDomainFindByID(&privconn->domains, id);
+ testDriverUnlock(privconn);
+
+ if (dom == NULL) {
testError (conn, VIR_ERR_NO_DOMAIN, NULL);
goto cleanup;
}
ret->id = dom->def->id;
cleanup:
+ if (dom)
+ virDomainObjUnlock(dom);
return ret;
}
virDomainPtr ret = NULL;
virDomainObjPtr dom ;
- if ((dom = virDomainFindByUUID(&privconn->domains, uuid)) == NULL) {
+ testDriverLock(privconn);
+ dom = virDomainFindByUUID(&privconn->domains, uuid);
+ testDriverUnlock(privconn);
+
+ if (dom == NULL) {
testError (conn, VIR_ERR_NO_DOMAIN, NULL);
goto cleanup;
}
ret->id = dom->def->id;
cleanup:
+ if (dom)
+ virDomainObjUnlock(dom);
return ret;
}
virDomainPtr ret = NULL;
virDomainObjPtr dom;
- if ((dom = virDomainFindByName(&privconn->domains, name)) == NULL) {
+ testDriverLock(privconn);
+ dom = virDomainFindByName(&privconn->domains, name);
+ testDriverUnlock(privconn);
+
+ if (dom == NULL) {
testError (conn, VIR_ERR_NO_DOMAIN, NULL);
goto cleanup;
}
ret->id = dom->def->id;
cleanup:
+ if (dom)
+ virDomainObjUnlock(dom);
return ret;
}
testConnPtr privconn = conn->privateData;
unsigned int n = 0, i;
- for (i = 0 ; i < privconn->domains.count && n < maxids ; i++)
+ testDriverLock(privconn);
+ for (i = 0 ; i < privconn->domains.count && n < maxids ; i++) {
+ virDomainObjLock(privconn->domains.objs[i]);
if (virDomainIsActive(privconn->domains.objs[i]))
ids[n++] = privconn->domains.objs[i]->def->id;
+ virDomainObjUnlock(privconn->domains.objs[i]);
+ }
+ testDriverUnlock(privconn);
return n;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
if (!privdom->persistent) {
virDomainRemoveInactive(&privconn->domains,
privdom);
+ privdom = NULL;
}
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
+ testDriverUnlock(privconn);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
privdom->state = VIR_DOMAIN_SHUTOFF;
domain->id = -1;
privdom->def->id = -1;
+ if (!privdom->persistent) {
+ virDomainRemoveInactive(&privconn->domains,
+ privdom);
+ privdom = NULL;
+ }
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
+ testDriverUnlock(privconn);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
break;
}
+ if (privdom->state == VIR_DOMAIN_SHUTOFF && !privdom->persistent) {
+ virDomainRemoveInactive(&privconn->domains,
+ privdom);
+ privdom = NULL;
+ }
+
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
+ testDriverUnlock(privconn);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
if (!privdom->persistent) {
virDomainRemoveInactive(&privconn->domains,
privdom);
+ privdom = NULL;
}
ret = 0;
close(fd);
unlink(path);
}
-
+ if (privdom)
+ virDomainObjUnlock(privdom);
+ testDriverUnlock(privconn);
return ret;
}
int fd = -1;
int len;
virDomainDefPtr def = NULL;
- virDomainObjPtr dom;
+ virDomainObjPtr dom = NULL;
int ret = -1;
if ((fd = open(path, O_RDONLY)) < 0) {
}
xml[len] = '\0';
+ testDriverLock(privconn);
def = virDomainDefParseString(conn, privconn->caps, xml);
if (!def)
goto cleanup;
VIR_FREE(xml);
if (fd != -1)
close(fd);
+ if (dom)
+ virDomainObjUnlock(dom);
+ testDriverUnlock(privconn);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
if (!privdom->persistent) {
virDomainRemoveInactive(&privconn->domains,
privdom);
+ privdom = NULL;
}
ret = 0;
cleanup:
if (fd != -1)
close(fd);
+ if (privdom)
+ virDomainObjUnlock(privdom);
+ testDriverUnlock(privconn);
return ret;
}
virDomainObjPtr privdom;
unsigned long ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = privdom->def->maxmem;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
- if ((privdom = virDomainFindByName(&privconn->domains,
- domain->name)) == NULL) {
+ testDriverLock(privconn);
+ privdom = virDomainFindByName(&privconn->domains,
+ domain->name);
+ testDriverUnlock(privconn);
+
+ if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
goto cleanup;
}
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
char *ret = NULL;
- if ((privdom = virDomainFindByName(&privconn->domains,
- domain->name)) == NULL) {
+ testDriverLock(privconn);
+ privdom = virDomainFindByName(&privconn->domains,
+ domain->name);
+ testDriverUnlock(privconn);
+
+ if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
goto cleanup;
}
flags);
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
testConnPtr privconn = conn->privateData;
unsigned int numInactive = 0, i;
- for (i = 0 ; i < privconn->domains.count ; i++)
+ testDriverLock(privconn);
+ for (i = 0 ; i < privconn->domains.count ; i++) {
+ virDomainObjLock(privconn->domains.objs[i]);
if (!virDomainIsActive(privconn->domains.objs[i]))
numInactive++;
+ virDomainObjUnlock(privconn->domains.objs[i]);
+ }
+ testDriverUnlock(privconn);
return numInactive;
}
testConnPtr privconn = conn->privateData;
unsigned int n = 0, i;
+ testDriverLock(privconn);
memset(names, 0, sizeof(*names)*maxnames);
- for (i = 0 ; i < privconn->domains.count && n < maxnames ; i++)
+ for (i = 0 ; i < privconn->domains.count && n < maxnames ; i++) {
+ virDomainObjLock(privconn->domains.objs[i]);
if (!virDomainIsActive(privconn->domains.objs[i]) &&
- !(names[n++] = strdup(privconn->domains.objs[i]->def->name)))
+ !(names[n++] = strdup(privconn->domains.objs[i]->def->name))) {
+ virDomainObjUnlock(privconn->domains.objs[i]);
goto no_memory;
+ }
+ virDomainObjUnlock(privconn->domains.objs[i]);
+ }
+ testDriverUnlock(privconn);
return n;
testError(conn, VIR_ERR_NO_MEMORY, NULL);
for (n = 0 ; n < maxnames ; n++)
VIR_FREE(names[n]);
+ testDriverUnlock(privconn);
return -1;
}
testConnPtr privconn = conn->privateData;
virDomainPtr ret = NULL;
virDomainDefPtr def;
- virDomainObjPtr dom;
+ virDomainObjPtr dom = NULL;
+ testDriverLock(privconn);
if ((def = virDomainDefParseString(conn, privconn->caps, xml)) == NULL)
goto cleanup;
cleanup:
virDomainDefFree(def);
+ if (dom)
+ virDomainObjUnlock(dom);
+ testDriverUnlock(privconn);
return ret;
}
int i, j;
int ret = -1;
+ testDriverLock(privconn);
if (startCell > privconn->numCells) {
testError(conn, VIR_ERR_INVALID_ARG,
"%s", _("Range exceeds available cells"));
ret = j;
cleanup:
+ testDriverUnlock(privconn);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
+ testDriverUnlock(privconn);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
privdom->state = VIR_DOMAIN_SHUTOFF;
virDomainRemoveInactive(&privconn->domains,
privdom);
+ privdom = NULL;
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
+ testDriverUnlock(privconn);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virDomainObjPtr privdom;
int ret = -1;
+ testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
+ testDriverUnlock(privconn);
if (privdom == NULL) {
testError(domain->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privdom)
+ virDomainObjUnlock(privdom);
return ret;
}
virNetworkObjPtr net;
virNetworkPtr ret = NULL;
- if ((net = virNetworkFindByUUID(&privconn->networks, uuid)) == NULL) {
+ testDriverLock(privconn);
+ net = virNetworkFindByUUID(&privconn->networks, uuid);
+ testDriverUnlock(privconn);
+
+ if (net == NULL) {
testError (conn, VIR_ERR_NO_NETWORK, NULL);
goto cleanup;
}
ret = virGetNetwork(conn, net->def->name, net->def->uuid);
cleanup:
+ if (net)
+ virNetworkObjUnlock(net);
return ret;
}
virNetworkObjPtr net;
virNetworkPtr ret = NULL;
- if ((net = virNetworkFindByName(&privconn->networks, name)) == NULL) {
+ testDriverLock(privconn);
+ net = virNetworkFindByName(&privconn->networks, name);
+ testDriverUnlock(privconn);
+
+ if (net == NULL) {
testError (conn, VIR_ERR_NO_NETWORK, NULL);
goto cleanup;
}
ret = virGetNetwork(conn, net->def->name, net->def->uuid);
cleanup:
+ if (net)
+ virNetworkObjUnlock(net);
return ret;
}
testConnPtr privconn = conn->privateData;
int numActive = 0, i;
- for (i = 0 ; i < privconn->networks.count ; i++)
+ testDriverLock(privconn);
+ for (i = 0 ; i < privconn->networks.count ; i++) {
+ virNetworkObjLock(privconn->networks.objs[i]);
if (virNetworkIsActive(privconn->networks.objs[i]))
numActive++;
+ virNetworkObjUnlock(privconn->networks.objs[i]);
+ }
+ testDriverUnlock(privconn);
return numActive;
}
testConnPtr privconn = conn->privateData;
int n = 0, i;
+ testDriverLock(privconn);
memset(names, 0, sizeof(*names)*nnames);
- for (i = 0 ; i < privconn->networks.count && n < nnames ; i++)
+ for (i = 0 ; i < privconn->networks.count && n < nnames ; i++) {
+ virNetworkObjLock(privconn->networks.objs[i]);
if (virNetworkIsActive(privconn->networks.objs[i]) &&
- !(names[n++] = strdup(privconn->networks.objs[i]->def->name)))
+ !(names[n++] = strdup(privconn->networks.objs[i]->def->name))) {
+ virNetworkObjUnlock(privconn->networks.objs[i]);
goto no_memory;
+ }
+ virNetworkObjUnlock(privconn->networks.objs[i]);
+ }
+ testDriverUnlock(privconn);
return n;
testError(conn, VIR_ERR_NO_MEMORY, NULL);
for (n = 0 ; n < nnames ; n++)
VIR_FREE(names[n]);
+ testDriverUnlock(privconn);
return -1;
}
testConnPtr privconn = conn->privateData;
int numInactive = 0, i;
- for (i = 0 ; i < privconn->networks.count ; i++)
+ testDriverLock(privconn);
+ for (i = 0 ; i < privconn->networks.count ; i++) {
+ virNetworkObjLock(privconn->networks.objs[i]);
if (!virNetworkIsActive(privconn->networks.objs[i]))
numInactive++;
+ virNetworkObjUnlock(privconn->networks.objs[i]);
+ }
+ testDriverUnlock(privconn);
return numInactive;
}
testConnPtr privconn = conn->privateData;
int n = 0, i;
+ testDriverLock(privconn);
memset(names, 0, sizeof(*names)*nnames);
- for (i = 0 ; i < privconn->networks.count && n < nnames ; i++)
+ for (i = 0 ; i < privconn->networks.count && n < nnames ; i++) {
+ virNetworkObjLock(privconn->networks.objs[i]);
if (!virNetworkIsActive(privconn->networks.objs[i]) &&
- !(names[n++] = strdup(privconn->networks.objs[i]->def->name)))
+ !(names[n++] = strdup(privconn->networks.objs[i]->def->name))) {
+ virNetworkObjUnlock(privconn->networks.objs[i]);
goto no_memory;
+ }
+ virNetworkObjUnlock(privconn->networks.objs[i]);
+ }
+ testDriverUnlock(privconn);
return n;
testError(conn, VIR_ERR_NO_MEMORY, NULL);
for (n = 0 ; n < nnames ; n++)
VIR_FREE(names[n]);
+ testDriverUnlock(privconn);
return -1;
}
static virNetworkPtr testNetworkCreate(virConnectPtr conn, const char *xml) {
testConnPtr privconn = conn->privateData;
virNetworkDefPtr def;
- virNetworkObjPtr net;
+ virNetworkObjPtr net = NULL;
virNetworkPtr ret = NULL;
+ testDriverLock(privconn);
if ((def = virNetworkDefParseString(conn, xml)) == NULL)
goto cleanup;
cleanup:
virNetworkDefFree(def);
+ if (net)
+ virNetworkObjUnlock(net);
+ testDriverUnlock(privconn);
return ret;
}
static virNetworkPtr testNetworkDefine(virConnectPtr conn, const char *xml) {
testConnPtr privconn = conn->privateData;
virNetworkDefPtr def;
- virNetworkObjPtr net;
+ virNetworkObjPtr net = NULL;
virNetworkPtr ret = NULL;
+ testDriverLock(privconn);
if ((def = virNetworkDefParseString(conn, xml)) == NULL)
goto cleanup;
cleanup:
virNetworkDefFree(def);
+ if (net)
+ virNetworkObjUnlock(net);
+ testDriverUnlock(privconn);
return ret;
}
virNetworkObjPtr privnet;
int ret = -1;
+ testDriverLock(privconn);
privnet = virNetworkFindByName(&privconn->networks,
network->name);
virNetworkRemoveInactive(&privconn->networks,
privnet);
+ privnet = NULL;
ret = 0;
cleanup:
+ if (privnet)
+ virNetworkObjUnlock(privnet);
+ testDriverUnlock(privconn);
return ret;
}
virNetworkObjPtr privnet;
int ret = -1;
+ testDriverLock(privconn);
privnet = virNetworkFindByName(&privconn->networks,
network->name);
+ testDriverUnlock(privconn);
if (privnet == NULL) {
testError(network->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privnet)
+ virNetworkObjUnlock(privnet);
return ret;
}
virNetworkObjPtr privnet;
int ret = -1;
+ testDriverLock(privconn);
privnet = virNetworkFindByName(&privconn->networks,
network->name);
if (!privnet->persistent) {
virNetworkRemoveInactive(&privconn->networks,
privnet);
+ privnet = NULL;
}
ret = 0;
cleanup:
+ if (privnet)
+ virNetworkObjUnlock(privnet);
+ testDriverUnlock(privconn);
return ret;
}
virNetworkObjPtr privnet;
char *ret = NULL;
+ testDriverLock(privconn);
privnet = virNetworkFindByName(&privconn->networks,
network->name);
+ testDriverUnlock(privconn);
if (privnet == NULL) {
testError(network->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = virNetworkDefFormat(network->conn, privnet->def);
cleanup:
+ if (privnet)
+ virNetworkObjUnlock(privnet);
return ret;
}
char *bridge = NULL;
virNetworkObjPtr privnet;
+ testDriverLock(privconn);
privnet = virNetworkFindByName(&privconn->networks,
network->name);
+ testDriverUnlock(privconn);
if (privnet == NULL) {
testError(network->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
}
cleanup:
+ if (privnet)
+ virNetworkObjUnlock(privnet);
return bridge;
}
virNetworkObjPtr privnet;
int ret = -1;
+ testDriverLock(privconn);
privnet = virNetworkFindByName(&privconn->networks,
network->name);
+ testDriverUnlock(privconn);
if (privnet == NULL) {
testError(network->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privnet)
+ virNetworkObjUnlock(privnet);
return ret;
}
virNetworkObjPtr privnet;
int ret = -1;
+ testDriverLock(privconn);
privnet = virNetworkFindByName(&privconn->networks,
network->name);
+ testDriverUnlock(privconn);
if (privnet == NULL) {
testError(network->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privnet)
+ virNetworkObjUnlock(privnet);
return ret;
}
virStoragePoolObjPtr pool;
virStoragePoolPtr ret = NULL;
+ testDriverLock(privconn);
pool = virStoragePoolObjFindByUUID(&privconn->pools, uuid);
+ testDriverUnlock(privconn);
if (pool == NULL) {
testError (conn, VIR_ERR_NO_STORAGE_POOL, NULL);
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
cleanup:
+ if (pool)
+ virStoragePoolObjUnlock(pool);
return ret;
}
virStoragePoolObjPtr pool;
virStoragePoolPtr ret = NULL;
+ testDriverLock(privconn);
pool = virStoragePoolObjFindByName(&privconn->pools, name);
+ testDriverUnlock(privconn);
if (pool == NULL) {
testError (conn, VIR_ERR_NO_STORAGE_POOL, NULL);
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
cleanup:
+ if (pool)
+ virStoragePoolObjUnlock(pool);
return ret;
}
testConnPtr privconn = conn->privateData;
int numActive = 0, i;
+ testDriverLock(privconn);
for (i = 0 ; i < privconn->pools.count ; i++)
if (virStoragePoolObjIsActive(privconn->pools.objs[i]))
numActive++;
+ testDriverUnlock(privconn);
return numActive;
}
testConnPtr privconn = conn->privateData;
int n = 0, i;
+ testDriverLock(privconn);
memset(names, 0, sizeof(*names)*nnames);
- for (i = 0 ; i < privconn->pools.count && n < nnames ; i++)
+ for (i = 0 ; i < privconn->pools.count && n < nnames ; i++) {
+ virStoragePoolObjLock(privconn->pools.objs[i]);
if (virStoragePoolObjIsActive(privconn->pools.objs[i]) &&
- !(names[n++] = strdup(privconn->pools.objs[i]->def->name)))
+ !(names[n++] = strdup(privconn->pools.objs[i]->def->name))) {
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
goto no_memory;
+ }
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
+ }
+ testDriverUnlock(privconn);
return n;
testError(conn, VIR_ERR_NO_MEMORY, NULL);
for (n = 0 ; n < nnames ; n++)
VIR_FREE(names[n]);
+ testDriverUnlock(privconn);
return -1;
}
testConnPtr privconn = conn->privateData;
int numInactive = 0, i;
- for (i = 0 ; i < privconn->pools.count ; i++)
+ testDriverLock(privconn);
+ for (i = 0 ; i < privconn->pools.count ; i++) {
+ virStoragePoolObjLock(privconn->pools.objs[i]);
if (!virStoragePoolObjIsActive(privconn->pools.objs[i]))
numInactive++;
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
+ }
+ testDriverUnlock(privconn);
return numInactive;
}
testConnPtr privconn = conn->privateData;
int n = 0, i;
+ testDriverLock(privconn);
memset(names, 0, sizeof(*names)*nnames);
- for (i = 0 ; i < privconn->pools.count && n < nnames ; i++)
+ for (i = 0 ; i < privconn->pools.count && n < nnames ; i++) {
+ virStoragePoolObjLock(privconn->pools.objs[i]);
if (!virStoragePoolObjIsActive(privconn->pools.objs[i]) &&
- !(names[n++] = strdup(privconn->pools.objs[i]->def->name)))
+ !(names[n++] = strdup(privconn->pools.objs[i]->def->name))) {
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
goto no_memory;
+ }
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
+ }
+ testDriverUnlock(privconn);
return n;
testError(conn, VIR_ERR_NO_MEMORY, NULL);
for (n = 0 ; n < nnames ; n++)
VIR_FREE(names[n]);
+ testDriverUnlock(privconn);
return -1;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
unsigned int flags ATTRIBUTE_UNUSED) {
testConnPtr privconn = conn->privateData;
virStoragePoolDefPtr def;
- virStoragePoolObjPtr pool;
+ virStoragePoolObjPtr pool = NULL;
virStoragePoolPtr ret = NULL;
+ testDriverLock(privconn);
if (!(def = virStoragePoolDefParse(conn, xml, NULL)))
goto cleanup;
}
if (!(pool = virStoragePoolObjAssignDef(conn, &privconn->pools, def))) {
- return NULL;
+ goto cleanup;
}
def = NULL;
cleanup:
virStoragePoolDefFree(def);
+ if (pool)
+ virStoragePoolObjUnlock(pool);
+ testDriverUnlock(privconn);
return ret;
}
unsigned int flags ATTRIBUTE_UNUSED) {
testConnPtr privconn = conn->privateData;
virStoragePoolDefPtr def;
- virStoragePoolObjPtr pool;
+ virStoragePoolObjPtr pool = NULL;
virStoragePoolPtr ret = NULL;
+ testDriverLock(privconn);
if (!(def = virStoragePoolDefParse(conn, xml, NULL)))
goto cleanup;
cleanup:
virStoragePoolDefFree(def);
+ if (pool)
+ virStoragePoolObjUnlock(pool);
+ testDriverUnlock(privconn);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
+ testDriverUnlock(privconn);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
}
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
privpool->active = 0;
- if (privpool->configFile == NULL)
+ if (privpool->configFile == NULL) {
virStoragePoolObjRemove(&privconn->pools, privpool);
+ privpool = NULL;
+ }
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
+ testDriverUnlock(privconn);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStoragePoolObjPtr privpool;
char *ret = NULL;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = virStoragePoolDefFormat(pool->conn, privpool->def);
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStoragePoolObjPtr privpool;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = privpool->volumes.count;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
int i = 0, n = 0;
memset(names, 0, maxnames * sizeof(*names));
+
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
}
}
+ virStoragePoolObjUnlock(privpool);
return n;
cleanup:
VIR_FREE(names[i]);
memset(names, 0, maxnames * sizeof(*names));
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return -1;
}
virStorageVolDefPtr privvol;
virStorageVolPtr ret = NULL;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
privvol->name, privvol->key);
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
unsigned int i;
virStorageVolPtr ret = NULL;
+ testDriverLock(privconn);
for (i = 0 ; i < privconn->pools.count ; i++) {
+ virStoragePoolObjLock(privconn->pools.objs[i]);
if (virStoragePoolObjIsActive(privconn->pools.objs[i])) {
virStorageVolDefPtr privvol =
virStorageVolDefFindByKey(privconn->pools.objs[i], key);
privconn->pools.objs[i]->def->name,
privvol->name,
privvol->key);
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
break;
}
}
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
}
+ testDriverUnlock(privconn);
if (!ret)
testError(conn, VIR_ERR_INVALID_STORAGE_VOL,
unsigned int i;
virStorageVolPtr ret = NULL;
+ testDriverLock(privconn);
for (i = 0 ; i < privconn->pools.count ; i++) {
+ virStoragePoolObjLock(privconn->pools.objs[i]);
if (virStoragePoolObjIsActive(privconn->pools.objs[i])) {
virStorageVolDefPtr privvol =
virStorageVolDefFindByPath(privconn->pools.objs[i], path);
privconn->pools.objs[i]->def->name,
privvol->name,
privvol->key);
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
break;
}
+ virStoragePoolObjUnlock(privconn->pools.objs[i]);
}
}
+ testDriverUnlock(privconn);
if (!ret)
testError(conn, VIR_ERR_INVALID_STORAGE_VOL,
virStorageVolDefPtr privvol = NULL;
virStorageVolPtr ret = NULL;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
pool->name);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(pool->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
cleanup:
virStorageVolDefFree(privvol);
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
int i;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
vol->pool);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(vol->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStorageVolDefPtr privvol;
int ret = -1;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
vol->pool);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(vol->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = 0;
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStorageVolDefPtr privvol;
char *ret = NULL;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
vol->pool);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(vol->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
ret = virStorageVolDefFormat(vol->conn, privpool->def, privvol);
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}
virStorageVolDefPtr privvol;
char *ret = NULL;
+ testDriverLock(privconn);
privpool = virStoragePoolObjFindByName(&privconn->pools,
vol->pool);
+ testDriverUnlock(privconn);
if (privpool == NULL) {
testError(vol->conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
testError(vol->conn, VIR_ERR_NO_MEMORY, "%s", _("path"));
cleanup:
+ if (privpool)
+ virStoragePoolObjUnlock(privpool);
return ret;
}