connection: Only overwrite master lists in main thread

This commit is contained in:
Cole Robinson 2013-07-06 21:42:41 -04:00
parent 141ad96298
commit 2e47d2e5fa

View File

@ -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))