virUUIDFormat(uuid, uuidstr);
obj = virHashLookup(doms->objs, uuidstr);
- virObjectRef(obj);
if (obj) {
+ virObjectRef(obj);
virObjectLock(obj);
- if (obj->removing) {
- virObjectUnlock(obj);
- virObjectUnref(obj);
- obj = NULL;
- }
}
return obj;
}
obj = virDomainObjListFindByUUIDLocked(doms, uuid);
virObjectRWUnlock(doms);
+ if (obj && obj->removing) {
+ virObjectUnlock(obj);
+ virObjectUnref(obj);
+ obj = NULL;
+ }
+
return obj;
}
virDomainObjPtr obj;
obj = virHashLookup(doms->objsName, name);
- virObjectRef(obj);
if (obj) {
+ virObjectRef(obj);
virObjectLock(obj);
- if (obj->removing) {
- virObjectUnlock(obj);
- virObjectUnref(obj);
- obj = NULL;
- }
}
return obj;
}
obj = virDomainObjListFindByNameLocked(doms, name);
virObjectRWUnlock(doms);
+ if (obj && obj->removing) {
+ virObjectUnlock(obj);
+ virObjectUnref(obj);
+ obj = NULL;
+ }
+
return obj;
}
/* See if a VM with matching UUID already exists */
if ((vm = virDomainObjListFindByUUIDLocked(doms, def->uuid))) {
- /* UUID matches, but if names don't match, refuse it */
- if (STRNEQ(vm->def->name, def->name)) {
+ if (vm->removing) {
+ virReportError(VIR_ERR_OPERATION_FAILED,
+ _("domain '%s' is already being removed"),
+ vm->def->name);
+ goto error;
+ } else if (STRNEQ(vm->def->name, def->name)) {
+ /* UUID matches, but if names don't match, refuse it */
virUUIDFormat(vm->def->uuid, uuidstr);
virReportError(VIR_ERR_OPERATION_FAILED,
_("domain '%s' is already defined with uuid %s"),