mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
connection: Only overwrite master lists in main thread
This commit is contained in:
parent
141ad96298
commit
2e47d2e5fa
@ -1074,7 +1074,7 @@ class vmmConnection(vmmGObject):
|
|||||||
|
|
||||||
origlist = self.vms.copy()
|
origlist = self.vms.copy()
|
||||||
current = {}
|
current = {}
|
||||||
new = []
|
new = {}
|
||||||
|
|
||||||
# Build list of previous vms with proper id/name mappings
|
# Build list of previous vms with proper id/name mappings
|
||||||
for uuid in origlist:
|
for uuid in origlist:
|
||||||
@ -1106,7 +1106,7 @@ class vmmConnection(vmmGObject):
|
|||||||
del(origlist[uuid])
|
del(origlist[uuid])
|
||||||
else:
|
else:
|
||||||
vm = vmmDomain(self, rawvm, uuid)
|
vm = vmmDomain(self, rawvm, uuid)
|
||||||
new.append(uuid)
|
new[uuid] = vm
|
||||||
|
|
||||||
current[uuid] = vm
|
current[uuid] = vm
|
||||||
|
|
||||||
@ -1157,21 +1157,11 @@ class vmmConnection(vmmGObject):
|
|||||||
|
|
||||||
self.hostinfo = self._backend.getInfo()
|
self.hostinfo = self._backend.getInfo()
|
||||||
|
|
||||||
# Poll for new virtual network objects
|
(goneNets, newNets, nets) = self._update_nets()
|
||||||
(goneNets, newNets, self.nets) = self._update_nets()
|
(gonePools, newPools, pools) = self._update_pools()
|
||||||
|
(goneInterfaces, newInterfaces, interfaces) = self._update_interfaces()
|
||||||
# Update pools
|
(goneNodedevs, newNodedevs, nodedevs) = self._update_nodedevs()
|
||||||
(gonePools, newPools, self.pools) = self._update_pools()
|
(goneVMs, newVMs, vms) = self._update_vms()
|
||||||
|
|
||||||
# Update interfaces
|
|
||||||
(goneInterfaces, newInterfaces,
|
|
||||||
self.interfaces) = self._update_interfaces()
|
|
||||||
|
|
||||||
# Update nodedevice list
|
|
||||||
(goneNodedevs, newNodedevs, self.nodedevs) = self._update_nodedevs()
|
|
||||||
|
|
||||||
# Poll for changed/new/removed VMs
|
|
||||||
(goneVMs, newVMs, self.vms) = self._update_vms()
|
|
||||||
|
|
||||||
def tick_send_signals():
|
def tick_send_signals():
|
||||||
"""
|
"""
|
||||||
@ -1183,6 +1173,12 @@ class vmmConnection(vmmGObject):
|
|||||||
if not self._backend.is_open():
|
if not self._backend.is_open():
|
||||||
return
|
return
|
||||||
|
|
||||||
|
self.vms = vms
|
||||||
|
self.nodedevs = nodedevs
|
||||||
|
self.interfaces = interfaces
|
||||||
|
self.pools = pools
|
||||||
|
self.nets = nets
|
||||||
|
|
||||||
# Make sure device polling is setup
|
# Make sure device polling is setup
|
||||||
if not self.netdev_initialized:
|
if not self.netdev_initialized:
|
||||||
self._init_netdev()
|
self._init_netdev()
|
||||||
@ -1194,7 +1190,8 @@ class vmmConnection(vmmGObject):
|
|||||||
for uuid in goneVMs:
|
for uuid in goneVMs:
|
||||||
self.emit("vm-removed", uuid)
|
self.emit("vm-removed", uuid)
|
||||||
goneVMs[uuid].cleanup()
|
goneVMs[uuid].cleanup()
|
||||||
for uuid in newVMs:
|
for uuid, obj in newVMs.items():
|
||||||
|
ignore = obj
|
||||||
self.emit("vm-added", uuid)
|
self.emit("vm-added", uuid)
|
||||||
|
|
||||||
# Update virtual network states
|
# Update virtual network states
|
||||||
@ -1222,7 +1219,7 @@ class vmmConnection(vmmGObject):
|
|||||||
# Update interface states
|
# Update interface states
|
||||||
for name in goneInterfaces:
|
for name in goneInterfaces:
|
||||||
self.emit("interface-removed", name)
|
self.emit("interface-removed", name)
|
||||||
goneInterfaces[name].items()
|
goneInterfaces[name].cleanup()
|
||||||
for name, obj in newInterfaces.items():
|
for name, obj in newInterfaces.items():
|
||||||
obj.connect("started", self._obj_signal_proxy,
|
obj.connect("started", self._obj_signal_proxy,
|
||||||
"interface-started", name)
|
"interface-started", name)
|
||||||
@ -1242,12 +1239,11 @@ class vmmConnection(vmmGObject):
|
|||||||
# Finally, we sample each domain
|
# Finally, we sample each domain
|
||||||
now = time.time()
|
now = time.time()
|
||||||
|
|
||||||
updateVMs = self.vms
|
updateVMs = vms.values()
|
||||||
if noStatsUpdate:
|
if noStatsUpdate:
|
||||||
updateVMs = newVMs
|
updateVMs = newVMs.values()
|
||||||
|
|
||||||
for uuid in updateVMs:
|
for vm in updateVMs:
|
||||||
vm = self.vms[uuid]
|
|
||||||
try:
|
try:
|
||||||
vm.tick(now)
|
vm.tick(now)
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
@ -1266,7 +1262,6 @@ class vmmConnection(vmmGObject):
|
|||||||
|
|
||||||
if not noStatsUpdate:
|
if not noStatsUpdate:
|
||||||
self._recalculate_stats(now, updateVMs)
|
self._recalculate_stats(now, updateVMs)
|
||||||
|
|
||||||
self.idle_emit("resources-sampled")
|
self.idle_emit("resources-sampled")
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
@ -1289,8 +1284,7 @@ class vmmConnection(vmmGObject):
|
|||||||
diskMaxRate = self.disk_io_max_rate() or 10.0
|
diskMaxRate = self.disk_io_max_rate() or 10.0
|
||||||
netMaxRate = self.network_traffic_max_rate() or 10.0
|
netMaxRate = self.network_traffic_max_rate() or 10.0
|
||||||
|
|
||||||
for uuid in vms:
|
for vm in vms:
|
||||||
vm = vms[uuid]
|
|
||||||
if not vm.is_active():
|
if not vm.is_active():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@ -1315,7 +1309,6 @@ class vmmConnection(vmmGObject):
|
|||||||
((now - prevTimestamp) *
|
((now - prevTimestamp) *
|
||||||
1000.0 * 1000.0 * 1000.0 * host_cpus))
|
1000.0 * 1000.0 * 1000.0 * host_cpus))
|
||||||
|
|
||||||
|
|
||||||
pcentHostCpu = max(0.0, min(100.0, pcentHostCpu))
|
pcentHostCpu = max(0.0, min(100.0, pcentHostCpu))
|
||||||
pcentMem = max(0.0, min(100.0, pcentMem))
|
pcentMem = max(0.0, min(100.0, pcentMem))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user