From fba60ffff11d42f2e6edecdfcb4200a50a844bed Mon Sep 17 00:00:00 2001 From: Lance Stout Date: Sun, 20 Nov 2011 12:15:39 -0800 Subject: Convert daemon threads back into normal threads. This may need to be reverted if CTRL-C handling breaks, but everything works fine so far in testing. Resolves issue #95. --- sleekxmpp/xmlstream/handler/waiter.py | 15 ++++++++++----- sleekxmpp/xmlstream/scheduler.py | 1 - sleekxmpp/xmlstream/xmlstream.py | 9 +++++---- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/sleekxmpp/xmlstream/handler/waiter.py b/sleekxmpp/xmlstream/handler/waiter.py index 21fc347c..a64b6a9b 100644 --- a/sleekxmpp/xmlstream/handler/waiter.py +++ b/sleekxmpp/xmlstream/handler/waiter.py @@ -87,11 +87,16 @@ class Waiter(BaseHandler): if timeout is None: timeout = self.stream().response_timeout - try: - stanza = self._payload.get(True, timeout) - except queue.Empty: - stanza = False - log.warning("Timed out waiting for %s", self.name) + elapsed_time = 0 + stanza = False + while elapsed_time < timeout and not self.stream().stop.is_set(): + try: + stanza = self._payload.get(True, 1) + break + except queue.Empty: + elapsed_time += 1 + if elapsed_time >= timeout: + log.warning("Timed out waiting for %s", self.name) self.stream().remove_handler(self.name) return stanza diff --git a/sleekxmpp/xmlstream/scheduler.py b/sleekxmpp/xmlstream/scheduler.py index 58219257..45d24272 100644 --- a/sleekxmpp/xmlstream/scheduler.py +++ b/sleekxmpp/xmlstream/scheduler.py @@ -134,7 +134,6 @@ class Scheduler(object): if threaded: self.thread = threading.Thread(name='sheduler_process', target=self._process) - self.thread.daemon = True self.thread.start() else: self._process() diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index 6d53022c..8d1c7e36 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -466,7 +466,7 @@ class XMLStream(object): """ def _handle_session_timeout(): - if not self.session_started_event.isSet(): + if not self.session_started_event.is_set(): log.debug("Session start has taken more " + \ "than %d seconds", self.session_timeout) self.disconnect(reconnect=self.auto_reconnect) @@ -1055,7 +1055,6 @@ class XMLStream(object): def start_thread(name, target): self.__thread[name] = threading.Thread(name=name, target=target) - self.__thread[name].daemon = True self.__thread[name].start() for t in range(0, HANDLER_THREADS): @@ -1255,7 +1254,7 @@ class XMLStream(object): """ log.debug("Loading event runner") try: - while not self.stop.isSet(): + while not self.stop.is_set(): try: wait = self.wait_timeout event = self.event_queue.get(True, timeout=wait) @@ -1320,7 +1319,9 @@ class XMLStream(object): """ try: while not self.stop.is_set(): - self.session_started_event.wait() + while not self.stop.is_set and \ + not self.session_started_event.is_set(): + self.session_started_event.wait(timeout=1) if self.__failed_send_stanza is not None: data = self.__failed_send_stanza self.__failed_send_stanza = None -- cgit v1.2.3