diff options
author | Daniel Gultsch <daniel@gultsch.de> | 2016-05-12 21:54:42 +0200 |
---|---|---|
committer | Christian Schneppe <christian@pix-art.de> | 2016-05-13 21:56:24 +0200 |
commit | 293d87793adde2e63b6916860adbb72c1b6b3e49 (patch) | |
tree | ecca3e2792c4f279dbdcb77e77151d7a71427437 /src/main/java/eu/siacs/conversations/xmpp | |
parent | f5017c3da8143af3ef4d7a9ab37e3fba4260e939 (diff) |
interrupt XMPPConnection Thread
in some cases the the DNS query might take too long (even though we specified a timeout)
if that happens we need a secondary solution (besides killing the socket) to stop the thread
Diffstat (limited to 'src/main/java/eu/siacs/conversations/xmpp')
-rw-r--r-- | src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java index c99459838..f9f8fb3bf 100644 --- a/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java +++ b/src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java @@ -293,6 +293,10 @@ public class XmppConnection implements Runnable { final Bundle result = DNSHelper.getSRVRecord(account.getServer(), mXmppConnectionService); final ArrayList<Parcelable>values = result.getParcelableArrayList("values"); for(Iterator<Parcelable> iterator = values.iterator(); iterator.hasNext();) { + if (Thread.currentThread().isInterrupted()) { + Log.d(Config.LOGTAG,account.getJid().toBareJid()+": Thread was interrupted"); + return; + } final Bundle namePort = (Bundle) iterator.next(); try { String srvRecordServer; @@ -1347,7 +1351,12 @@ public class XmppConnection implements Runnable { } } + public void interrupt() { + Thread.currentThread().interrupt(); + } + public void disconnect(final boolean force) { + interrupt(); Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": disconnecting force="+Boolean.valueOf(force)); if (force) { forceCloseSocket(); |