lxcDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
- lxcDriverUnlock(driver);
if (!vm) {
lxcError(dom->conn, dom, VIR_ERR_INVALID_DOMAIN,
ret = 0;
cleanup:
+ lxcDriverUnlock(driver);
if (cgroup)
virCgroupFree(&cgroup);
if (vm)
lxcDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, domain->uuid);
- lxcDriverUnlock(driver);
if (vm == NULL) {
lxcError(NULL, domain, VIR_ERR_INTERNAL_ERROR,
ret = 0;
cleanup:
+ lxcDriverUnlock(driver);
virCgroupFree(&group);
if (vm)
virDomainObjUnlock(vm);
lxcDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, domain->uuid);
- lxcDriverUnlock(driver);
if (vm == NULL) {
lxcError(NULL, domain, VIR_ERR_INTERNAL_ERROR,
ret = 0;
cleanup:
+ lxcDriverUnlock(driver);
virCgroupFree(&group);
if (vm)
virDomainObjUnlock(vm);
ret=0;
return_point:
+ if (vm)
+ virDomainObjUnlock(vm);
oneDriverUnlock(driver);
return ret;
}
static char *oneGetOSType(virDomainPtr dom)
{
-
one_driver_t *driver = (one_driver_t *)dom->conn->privateData;
virDomainObjPtr vm = NULL;
+ char *ret = NULL;
oneDriverLock(driver);
vm =virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
oneError(dom->conn,dom, VIR_ERR_INVALID_DOMAIN,
"%s", _("no domain with matching uuid"));
- return NULL;
+ goto cleanup;
}
- virDomainObjUnlock(vm);
- return strdup(vm->def->os.type);
+ ret = strdup(vm->def->os.type);
+ if (!ret)
+ virReportOOMError(dom->conn);
+
+cleanup:
+ if (vm)
+ virDomainObjUnlock(vm);
+ return ret;
}
static int oneDomainStart(virDomainPtr dom)
int ret=-1;
oneDriverLock(driver);
- if((vm=virDomainFindByID(&driver->domains, dom->id))) {
- if(!(c_oneShutdown(vm->pid) ) ) {
- vm->state=VIR_DOMAIN_SHUTDOWN;
- ret= 0;
- goto return_point;
- }
+ if (!(vm=virDomainFindByID(&driver->domains, dom->id))) {
+ oneError(dom->conn,dom, VIR_ERR_INVALID_DOMAIN,
+ _("no domain with id %d"), dom->id);
+ goto return_point;
+ }
+
+ if (c_oneShutdown(vm->pid)) {
oneError(dom->conn, dom, VIR_ERR_OPERATION_INVALID,
_("Wrong state to perform action"));
goto return_point;
}
- oneError(dom->conn,dom, VIR_ERR_INVALID_DOMAIN,
- _("no domain with id %d"), dom->id);
- goto return_point;
+ vm->state=VIR_DOMAIN_SHUTDOWN;
+ ret= 0;
if (!vm->persistent) {
virDomainRemoveInactive(&driver->domains, vm);
vm = NULL;
}
+
return_point:
if(vm)
virDomainObjUnlock(vm);
const char *path)
{
struct qemud_driver *driver = dom->conn->privateData;
- virDomainObjPtr vm;
+ virDomainObjPtr vm = NULL;
char *command = NULL;
char *info = NULL;
int fd = -1;
memcpy(header.magic, QEMUD_SAVE_MAGIC, sizeof(header.magic));
header.version = QEMUD_SAVE_VERSION;
+ qemuDriverLock(driver);
if (driver->saveImageFormat == NULL)
header.compressed = QEMUD_SAVE_FORMAT_RAW;
else {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("Invalid save image format specified "
"in configuration file"));
- return -1;
+ goto cleanup;
}
}
- qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) {
goto cleanup;
}
+ qemuDriverLock(driver);
def = qemuParseCommandLineString(conn, driver->caps, config);
+ qemuDriverUnlock(driver);
if (!def)
goto cleanup;
int *nparams)
{
struct qemud_driver *driver = dom->conn->privateData;
- char *ret;
+ char *ret = NULL;
+ qemuDriverLock(driver);
if (!qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU)) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
__FUNCTION__);
- return NULL;
+ goto cleanup;
}
if (nparams)
ret = strdup("posix");
if (!ret)
virReportOOMError(dom->conn);
+
+cleanup:
+ qemuDriverUnlock(driver);
return ret;
}
virDomainObjPtr vm = NULL;
int ret = -1;
+ qemuDriverLock(driver);
if (!qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU)) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
__FUNCTION__);
- return -1;
+ goto cleanup;
}
- qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
- qemuDriverUnlock(driver);
if (vm == NULL) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_INTERNAL_ERROR,
virCgroupFree(&group);
if (vm)
virDomainObjUnlock(vm);
+ qemuDriverUnlock(driver);
return ret;
}
int ret = -1;
int rc;
+ qemuDriverLock(driver);
if (!qemuCgroupControllerActive(driver, VIR_CGROUP_CONTROLLER_CPU)) {
qemudReportError(dom->conn, dom, NULL, VIR_ERR_NO_SUPPORT,
__FUNCTION__);
- return -1;
+ goto cleanup;
}
if ((*nparams) != 1) {
qemudReportError(dom->conn, domain, NULL, VIR_ERR_INVALID_ARG,
"%s", _("Invalid parameter count"));
- return -1;
+ goto cleanup;
}
- qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
- qemuDriverUnlock(driver);
if (vm == NULL) {
qemudReportError(dom->conn, domain, NULL, VIR_ERR_INTERNAL_ERROR,
virCgroupFree(&group);
if (vm)
virDomainObjUnlock(vm);
+ qemuDriverUnlock(driver);
return ret;
}
def = NULL;
if (backend->startPool &&
- backend->startPool(conn, pool) < 0)
+ backend->startPool(conn, pool) < 0) {
+ virStoragePoolObjRemove(&driver->pools, pool);
+ pool = NULL;
goto cleanup;
+ }
if (backend->refreshPool(conn, pool) < 0) {
if (backend->stopPool)
backend->stopPool(conn, pool);
+ virStoragePoolObjRemove(&driver->pools, pool);
+ pool = NULL;
goto cleanup;
}
pool->active = 1;
ret = virGetStoragePool(conn, pool->def->name, pool->def->uuid);
- virStoragePoolObjUnlock(pool);
- pool = NULL;
cleanup:
virStoragePoolDefFree(def);
if (pool)
- virStoragePoolObjRemove(&driver->pools, pool);
+ virStoragePoolObjUnlock(pool);
storageDriverUnlock(driver);
return ret;
}
virStorageBackendPtr backend;
virStorageVolDefPtr origvol = NULL, newvol = NULL;
virStorageVolPtr ret = NULL, volobj = NULL;
- int buildret, diffpool;
-
- diffpool = !STREQ(obj->name, vobj->pool);
+ int buildret;
storageDriverLock(driver);
pool = virStoragePoolObjFindByUUID(&driver->pools, obj->uuid);
- if (diffpool) {
+ if (pool && STRNEQ(obj->name, vobj->pool)) {
virStoragePoolObjUnlock(pool);
origpool = virStoragePoolObjFindByName(&driver->pools, vobj->pool);
virStoragePoolObjLock(pool);
- } else
- origpool = pool;
+ }
storageDriverUnlock(driver);
-
if (!pool) {
virStorageReportError(obj->conn, VIR_ERR_INVALID_STORAGE_POOL,
"%s", _("no storage pool with matching uuid"));
goto cleanup;
}
- if (diffpool && !origpool) {
+ if (STRNEQ(obj->name, vobj->pool) && !origpool) {
virStorageReportError(obj->conn, VIR_ERR_NO_STORAGE_POOL,
_("no storage pool with matching name '%s'"),
vobj->pool);
goto cleanup;
}
- if (diffpool && !virStoragePoolObjIsActive(origpool)) {
+ if (origpool && !virStoragePoolObjIsActive(origpool)) {
virStorageReportError(obj->conn, VIR_ERR_INTERNAL_ERROR,
"%s", _("storage pool is not active"));
goto cleanup;
if ((backend = virStorageBackendForType(pool->def->type)) == NULL)
goto cleanup;
- origvol = virStorageVolDefFindByName(origpool, vobj->name);
+ origvol = virStorageVolDefFindByName(origpool ? origpool : pool, vobj->name);
if (!origvol) {
virStorageReportError(obj->conn, VIR_ERR_NO_STORAGE_VOL,
_("no storage vol with matching name '%s'"),
newvol->building = 1;
virStoragePoolObjUnlock(pool);
- if (diffpool) {
+ if (origpool) {
origpool->asyncjobs++;
virStoragePoolObjUnlock(origpool);
}
storageDriverLock(driver);
virStoragePoolObjLock(pool);
- if (diffpool)
+ if (origpool)
virStoragePoolObjLock(origpool);
storageDriverUnlock(driver);
newvol = NULL;
pool->asyncjobs--;
- if (diffpool) {
+ if (origpool) {
origpool->asyncjobs--;
virStoragePoolObjUnlock(origpool);
origpool = NULL;
virStorageVolDefFree(newvol);
if (pool)
virStoragePoolObjUnlock(pool);
- if (diffpool && origpool)
+ if (origpool)
virStoragePoolObjUnlock(origpool);
return ret;
}
return NULL;
}
-static virDomainObjPtr
-testDomainAssignDef(virConnectPtr conn,
- virDomainObjList *domlist,
- virDomainDefPtr domdef)
+static int
+testDomainGenerateIfnames(virConnectPtr conn,
+ virDomainDefPtr domdef)
{
- virDomainObjPtr domobj = NULL;
int i = 0;
for (i = 0; i < domdef->nnets; i++) {
ifname = testDomainGenerateIfname(conn, domdef);
if (!ifname)
- goto error;
+ return -1;
domdef->nets[i]->ifname = ifname;
}
- if (!(domobj = virDomainAssignDef(conn, domlist, domdef)))
- goto error;
-
-error:
- return domobj;
+ return 0;
}
+
static int testOpenDefault(virConnectPtr conn) {
int u;
struct timeval tv;
defaultDomainXML,
VIR_DOMAIN_XML_INACTIVE)))
goto error;
- if (!(domobj = testDomainAssignDef(conn, &privconn->domains, domdef))) {
- virDomainDefFree(domdef);
+ if (testDomainGenerateIfnames(conn, domdef) < 0)
goto error;
- }
+ if (!(domobj = virDomainAssignDef(conn, &privconn->domains, domdef)))
+ goto error;
+ domdef = NULL;
domobj->def->id = privconn->nextDomID++;
domobj->state = VIR_DOMAIN_RUNNING;
domobj->persistent = 1;
testDriverUnlock(privconn);
conn->privateData = NULL;
VIR_FREE(privconn);
+ virDomainDefFree(domdef);
return VIR_DRV_OPEN_ERROR;
}
goto error;
}
- if (!(dom = testDomainAssignDef(conn, &privconn->domains, def))) {
+ if (testDomainGenerateIfnames(conn, def) < 0 ||
+ !(dom = virDomainAssignDef(conn, &privconn->domains, def))) {
virDomainDefFree(def);
goto error;
}
VIR_DOMAIN_XML_INACTIVE)) == NULL)
goto cleanup;
- if ((dom = testDomainAssignDef(conn, &privconn->domains,
- def)) == NULL) {
- virDomainDefFree(def);
+ if (testDomainGenerateIfnames(conn, def) < 0)
goto cleanup;
- }
+ if (!(dom = virDomainAssignDef(conn, &privconn->domains, def)))
+ goto cleanup;
+ def = NULL;
dom->state = VIR_DOMAIN_RUNNING;
dom->def->id = privconn->nextDomID++;
VIR_DOMAIN_EVENT_STARTED,
VIR_DOMAIN_EVENT_STARTED_BOOTED);
- ret = virGetDomain(conn, def->name, def->uuid);
+ ret = virGetDomain(conn, dom->def->name, dom->def->uuid);
if (ret)
- ret->id = def->id;
+ ret->id = dom->def->id;
cleanup:
if (dom)
virDomainObjUnlock(dom);
if (event)
testDomainEventQueue(privconn, event);
+ if (def)
+ virDomainDefFree(def);
testDriverUnlock(privconn);
return ret;
}
if (!def)
goto cleanup;
- if ((dom = testDomainAssignDef(conn, &privconn->domains,
- def)) == NULL)
+ if (testDomainGenerateIfnames(conn, def) < 0)
goto cleanup;
+ if (!(dom = virDomainAssignDef(conn, &privconn->domains, def)))
+ goto cleanup;
+ def = NULL;
dom->state = VIR_DOMAIN_RUNNING;
dom->def->id = privconn->nextDomID++;
- def = NULL;
event = virDomainEventNewFromObj(dom,
VIR_DOMAIN_EVENT_STARTED,
VIR_DOMAIN_EVENT_STARTED_RESTORED);
VIR_DOMAIN_XML_INACTIVE)) == NULL)
goto cleanup;
- if ((dom = testDomainAssignDef(conn, &privconn->domains,
- def)) == NULL) {
+ if (testDomainGenerateIfnames(conn, def) < 0)
+ goto cleanup;
+ if (!(dom = virDomainAssignDef(conn, &privconn->domains, def)))
goto cleanup;
- }
def = NULL;
dom->persistent = 1;
"umlDriverLock";
"nodedevDriverLock";
"networkDriverLock";
- "storageDriverLock"
+ "storageDriverLock";
+ "oneDriverLock"
]
(*
"umlDriverUnlock";
"nodedevDriverUnlock";
"networkDriverUnlock";
- "storageDriverUnlock"
+ "storageDriverUnlock";
+ "oneDriverUnlock"
]
(*
"virStorageDriverStatePtr";
"network_driver";
"virDeviceMonitorState";
+ "one_driver_t";
]