mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
Move the actual call routed by do_legacy_api_with_uuid out of the scope of
the domains_lock. The call itself is already locking as necessary, and it is important for domain_start to be able to release the lock across the scope of waitForDevices. Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
1 parent
6e66f078d4
commit
1d68773ad2
1 file changed
+10
-5
@@ -641,17 +641,22 @@ class XendDomain:
|
||||
return (self.get_vm_with_dev_uuid(klass, dev_uuid) != None)
|
||||
|
||||
def do_legacy_api_with_uuid(self, fn, vm_uuid, *args, **kwargs):
|
||||
dom = self.uuid_to_dom(vm_uuid)
|
||||
fn(dom, *args, **kwargs)
|
||||
|
||||
def uuid_to_dom(self, vm_uuid):
|
||||
self.domains_lock.acquire()
|
||||
try:
|
||||
for domid, dom in self.domains.items():
|
||||
if dom.get_uuid == vm_uuid:
|
||||
return fn(domid, *args, **kwargs)
|
||||
if dom.get_uuid() == vm_uuid:
|
||||
return domid
|
||||
|
||||
if vm_uuid in self.managed_domains:
|
||||
domid = self.managed_domains[vm_uuid].getDomid()
|
||||
if domid == None:
|
||||
domid = self.managed_domains[vm_uuid].getName()
|
||||
return fn(domid, *args, **kwargs)
|
||||
if domid is None:
|
||||
return self.managed_domains[vm_uuid].getName()
|
||||
else:
|
||||
return domid
|
||||
|
||||
raise XendInvalidDomain("Domain does not exist")
|
||||
finally:
|
||||
|
||||