Use daemon threads instead of signals.

Daemonized threads exit once the main program has quit,
and the only threads left running are all daemon threads.

Should fix hanging clients while not trampling over anyone
else's signal handlers.
This commit is contained in:
Lance Stout 2010-12-16 22:21:50 -05:00
parent cbc42c29fb
commit 0aee445e69

View file

@ -16,7 +16,6 @@ import sys
import threading import threading
import time import time
import types import types
import signal
try: try:
import queue import queue
except ImportError: except ImportError:
@ -209,24 +208,6 @@ class XMLStream(object):
self.auto_reconnect = True self.auto_reconnect = True
self.is_client = False self.is_client = False
try:
if hasattr(signal, 'SIGHUP'):
signal.signal(signal.SIGHUP, self._handle_kill)
if hasattr(signal, 'SIGTERM'):
# Used in Windows
signal.signal(signal.SIGTERM, self._handle_kill)
except:
log.debug("Can not set interrupt signal handlers. " + \
"SleekXMPP is not running from a main thread.")
def _handle_kill(self, signum, frame):
"""
Capture kill event and disconnect cleanly after first
spawning the "killed" event.
"""
self.event("killed", direct=True)
self.disconnect()
def new_id(self): def new_id(self):
""" """
Generate and return a new stream ID in hexadecimal form. Generate and return a new stream ID in hexadecimal form.
@ -705,6 +686,7 @@ class XMLStream(object):
def start_thread(name, target): def start_thread(name, target):
self.__thread[name] = threading.Thread(name=name, target=target) self.__thread[name] = threading.Thread(name=name, target=target)
self.__thread[name].daemon = True
self.__thread[name].start() self.__thread[name].start()
for t in range(0, HANDLER_THREADS): for t in range(0, HANDLER_THREADS):