make sure tagwriter is clear before force closing socket

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/xml/TagWriter.java       | 26 +---
src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java |  2 
2 files changed, 9 insertions(+), 19 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/xml/TagWriter.java 🔗

@@ -9,7 +9,6 @@ import eu.siacs.conversations.xmpp.stanzas.AbstractStanza;
 
 public class TagWriter {
 
-	private OutputStream plainOutputStream;
 	private OutputStreamWriter outputStream;
 	private boolean finshed = false;
 	private LinkedBlockingQueue<AbstractStanza> writeQueue = new LinkedBlockingQueue<AbstractStanza>();
@@ -24,15 +23,9 @@ public class TagWriter {
 				}
 				try {
 					AbstractStanza output = writeQueue.take();
-					if (outputStream == null) {
-						shouldStop = true;
-					} else {
-						outputStream.write(output.toString());
-						outputStream.flush();
-					}
-				} catch (IOException e) {
-					shouldStop = true;
-				} catch (InterruptedException e) {
+					outputStream.write(output.toString());
+					outputStream.flush();
+				} catch (Exception e) {
 					shouldStop = true;
 				}
 			}
@@ -46,17 +39,9 @@ public class TagWriter {
 		if (out == null) {
 			throw new IOException();
 		}
-		this.plainOutputStream = out;
 		this.outputStream = new OutputStreamWriter(out);
 	}
 
-	public OutputStream getOutputStream() throws IOException {
-		if (this.plainOutputStream == null) {
-			throw new IOException();
-		}
-		return this.plainOutputStream;
-	}
-
 	public TagWriter beginDocument() throws IOException {
 		if (outputStream == null) {
 			throw new IOException("output stream was null");
@@ -111,4 +96,9 @@ public class TagWriter {
 	public boolean isActive() {
 		return outputStream != null;
 	}
+
+	public void forceClose() {
+		finish();
+		outputStream = null;
+	}
 }

src/main/java/eu/siacs/conversations/xmpp/XmppConnection.java 🔗

@@ -1356,8 +1356,8 @@ public class XmppConnection implements Runnable {
 		interrupt();
 		Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": disconnecting force="+Boolean.valueOf(force));
 		if (force) {
+			tagWriter.forceClose();
 			forceCloseSocket();
-			return;
 		} else {
 			if (tagWriter.isActive()) {
 				tagWriter.finish();