[bug] use dict keys to iterate
authorVictor Shyba <victor.shyba@gmail.com>
Wed, 27 May 2015 21:51:44 +0000 (18:51 -0300)
committerVictor Shyba <victor.shyba@gmail.com>
Thu, 28 May 2015 14:44:06 +0000 (11:44 -0300)
We ran into a RuntimeError yesterday on this line, the callback can
modify this dict and make the iteration raise an error. Using keys
method to iterate is safer.
See
http://stackoverflow.com/questions/11941817/python-runtimeerror-dictionary-changed-size-during-iteration-how-to-avoid-th/11941855#11941855

src/leap/common/events/client.py

index 6b234a1..0706fe3 100644 (file)
@@ -184,7 +184,7 @@ class EventsClient(object):
         :type msg: list(str)
         """
         logger.debug("Handling event %s..." % event)
-        for uid in self._callbacks[event]:
+        for uid in self._callbacks[event].keys():
             callback = self._callbacks[event][uid]
             logger.debug("Executing callback %s." % uid)
             callback(event, *content)
@@ -352,7 +352,6 @@ class EventsClientThread(threading.Thread, EventsClient):
         """
         self._sub.socket.setsockopt(zmq.SUBSCRIBE, tag)
 
-
     def _unsubscribe(self, tag):
         """
         Unsubscribe from a tag on the zmq SUB socket.