summaryrefslogtreecommitdiff
path: root/sleekxmpp/xmlstream
diff options
context:
space:
mode:
Diffstat (limited to 'sleekxmpp/xmlstream')
-rw-r--r--sleekxmpp/xmlstream/scheduler.py1
-rw-r--r--sleekxmpp/xmlstream/xmlstream.py39
2 files changed, 21 insertions, 19 deletions
diff --git a/sleekxmpp/xmlstream/scheduler.py b/sleekxmpp/xmlstream/scheduler.py
index 40aaf695..e4df02d1 100644
--- a/sleekxmpp/xmlstream/scheduler.py
+++ b/sleekxmpp/xmlstream/scheduler.py
@@ -41,6 +41,7 @@ class Scheduler(object):
def process(self, threaded=True):
if threaded:
self.thread = threading.Thread(name='shedulerprocess', 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 a8bcac00..025a6cbf 100644
--- a/sleekxmpp/xmlstream/xmlstream.py
+++ b/sleekxmpp/xmlstream/xmlstream.py
@@ -59,7 +59,7 @@ class XMLStream(object):
self.ssl_support = ssl_support
self.escape_quotes = escape_quotes
self.state = statemachine.StateMachine(('disconnected','connecting',
- 'connected'))
+ 'connected'))
self.should_reconnect = True
self.setSocket(socket)
@@ -240,7 +240,7 @@ class XMLStream(object):
if self.should_reconnect:
self.disconnect(reconnect=True)
- logging.debug('Quitting Process thread')
+ logging.debug('Quitting Process thread')
def __readXML(self):
"Parses the incoming stream, adding to xmlin queue as it goes"
@@ -306,23 +306,24 @@ class XMLStream(object):
return True
def disconnect(self, reconnect=False):
- if not self.state.transition('connected','disconnected'):
- logging.warning("Already disconnected.")
- return
- logging.debug("Disconnecting...")
- self.sendPriorityRaw(self.stream_footer)
- time.sleep(5)
- #send end of stream
- #wait for end of stream back
- try:
-# self.socket.shutdown(socket.SHUT_RDWR)
- self.socket.close()
- except socket.error as (errno,strerror):
- logging.exception("Error while disconnecting. Socket Error #%s: %s" % (errno, strerror))
- try:
- self.filesocket.close()
- except socket.error as (errno,strerror):
- logging.exception("Error closing filesocket.")
+ with self.state.transition_ctx('connected','disconnected') as locked:
+ if not locked:
+ logging.warning("Already disconnected.")
+ return
+ logging.debug("Disconnecting...")
+ self.sendRaw(self.stream_footer)
+ time.sleep(5)
+ #send end of stream
+ #wait for end of stream back
+ try:
+# self.socket.shutdown(socket.SHUT_RDWR)
+ self.socket.close()
+ except socket.error as (errno,strerror):
+ logging.exception("Error while disconnecting. Socket Error #%s: %s" % (errno, strerror))
+ try:
+ self.filesocket.close()
+ except socket.error as (errno,strerror):
+ logging.exception("Error closing filesocket.")
if reconnect: self.connect()