Merge branch 'develop' into roster

This commit is contained in:
Lance Stout
2011-07-01 15:19:05 -07:00
6 changed files with 112 additions and 39 deletions

View File

@@ -64,8 +64,7 @@ class RootStanza(StanzaBase):
# log the error
log.exception('Error handling {%s}%s stanza' %
(self.namespace, self.name))
# Finally raise the exception, so it can be handled (or not)
# at a higher level by using sys.excepthook.
raise e
# Finally raise the exception to a global exception handler
self.stream.exception(e)
register_stanza_plugin(RootStanza, Error)

View File

@@ -764,7 +764,6 @@ class XMLStream(object):
Event handlers and the send queue will be threaded
regardless of this parameter's value.
"""
self._thread_excepthook()
self.scheduler.process(threaded=True)
def start_thread(name, target):
@@ -1052,30 +1051,16 @@ class XMLStream(object):
self.event_queue.put(('quit', None, None))
return
def _thread_excepthook(self):
def exception(self, exception):
"""
If a threaded event handler raises an exception, there is no way to
catch it except with an excepthook. Currently, each thread has its own
excepthook, but ideally we could use the main sys.excepthook.
Process an unknown exception.
Modifies threading.Thread to use sys.excepthook when an exception
is not caught.
Meant to be overridden.
Arguments:
exception -- An unhandled exception object.
"""
init_old = threading.Thread.__init__
def init(self, *args, **kwargs):
init_old(self, *args, **kwargs)
run_old = self.run
def run_with_except_hook(*args, **kw):
try:
run_old(*args, **kw)
except (KeyboardInterrupt, SystemExit):
raise
except:
sys.excepthook(*sys.exc_info())
self.run = run_with_except_hook
threading.Thread.__init__ = init
pass
# To comply with PEP8, method names now use underscores.