On Thu, Aug 31, 2017 at 09:20:40PM +0200, Wojtek Porczyk wrote:
When the callback causes something that results in changes wrt
registered handles, python aborts iteration.
Relevant error message:
Exception in callback None()
handle: <Handle cancelled>
Traceback (most recent call last):
File "/usr/lib64/python3.5/asyncio/events.py", line 126, in _run
self._callback(*self._args)
File "/usr/lib64/python3.5/site-packages/libvirtaio.py", line 99, in
_handle
for callback in self.callbacks.values():
RuntimeError: dictionary changed size during iteration
QubesOS/qubes-issues#2805
Signed-off-by: Wojtek Porczyk <woju(a)invisiblethingslab.com>
---
libvirtaio.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libvirtaio.py b/libvirtaio.py
index 46de9ab..d962e64 100644
--- a/libvirtaio.py
+++ b/libvirtaio.py
@@ -96,7 +96,7 @@ class Descriptor(object):
:param int event: The event (from libvirt's constants) being dispatched
'''
- for callback in self.callbacks.values():
+ for callback in list(self.callbacks.values()):
if callback.event is not None and callback.event & event:
callback.cb(callback.iden, self.fd, event, callback.opaque)
Reviewed-by: Daniel P. Berrange <berrange(a)redhat.com>
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|