guarantee ordering and display errors from variable.Event
authorForrest Voight <forrest@forre.st>
Fri, 29 Jul 2011 00:30:28 +0000 (20:30 -0400)
committerForrest Voight <forrest@forre.st>
Fri, 29 Jul 2011 00:30:28 +0000 (20:30 -0400)
p2pool/util/variable.py

index cdc64d7..9655af5 100644 (file)
@@ -1,7 +1,7 @@
 import itertools
 
 from twisted.internet import defer, reactor
-from twisted.python import failure
+from twisted.python import failure, log
 
 class Event(object):
     def __init__(self):
@@ -24,13 +24,19 @@ class Event(object):
         self.one_time_observers.pop(id)
     
     def happened(self, event=None):
-        for func in self.observers.itervalues():
-            func(event)
+        for id, func in sorted(self.observers.iteritems()):
+            try:
+                func(event)
+            except:
+                log.err(None, "Error while processing Event callbacks:")
         
         one_time_observers = self.one_time_observers
         self.one_time_observers = {}
-        for func in one_time_observers.itervalues():
-            func(event)
+        for id, func in sorted(one_time_observers.iteritems()):
+            try:
+                func(event)
+            except:
+                log.err(None, "Error while processing Event callbacks:")
     
     def get_deferred(self, timeout=None):
         df = defer.Deferred()