aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Schneppe <christian@pix-art.de>2018-01-21 15:12:46 +0100
committerChristian Schneppe <christian@pix-art.de>2018-01-21 15:12:46 +0100
commit557a10664626975189cb05a2b5c139ca5b00d27c (patch)
tree10c4f190dc5bcd76e3c77d9ac2222dca2d6f72f9
parentce02d3e2a9d6a5180ba458c97a4c25e09aba230c (diff)
use countdownlatch to check if TagWriter has finished
-rw-r--r--src/main/java/de/pixart/messenger/xml/TagWriter.java17
-rw-r--r--src/main/java/de/pixart/messenger/xmpp/XmppConnection.java12
2 files changed, 14 insertions, 15 deletions
diff --git a/src/main/java/de/pixart/messenger/xml/TagWriter.java b/src/main/java/de/pixart/messenger/xml/TagWriter.java
index c6b84170d..53f04128f 100644
--- a/src/main/java/de/pixart/messenger/xml/TagWriter.java
+++ b/src/main/java/de/pixart/messenger/xml/TagWriter.java
@@ -5,7 +5,9 @@ import android.util.Log;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
import de.pixart.messenger.Config;
import de.pixart.messenger.xmpp.stanzas.AbstractStanza;
@@ -15,13 +17,15 @@ public class TagWriter {
private OutputStreamWriter outputStream;
private boolean finished = false;
private LinkedBlockingQueue<AbstractStanza> writeQueue = new LinkedBlockingQueue<AbstractStanza>();
+ private CountDownLatch stanzaWriterCountDownLatch = null;
private Thread asyncStanzaWriter = new Thread() {
@Override
public void run() {
+ stanzaWriterCountDownLatch = new CountDownLatch(1);
while (!isInterrupted()) {
if (finished && writeQueue.size() == 0) {
- return;
+ break;
}
try {
AbstractStanza output = writeQueue.take();
@@ -30,9 +34,10 @@ public class TagWriter {
outputStream.flush();
}
} catch (Exception e) {
- return;
+ break;
}
}
+ stanzaWriterCountDownLatch.countDown();
}
};
@@ -94,8 +99,12 @@ public class TagWriter {
this.finished = true;
}
- public boolean finished() {
- return (this.writeQueue.size() == 0);
+ public boolean await(long timeout, TimeUnit timeunit) throws InterruptedException {
+ if (stanzaWriterCountDownLatch == null) {
+ return true;
+ } else {
+ return stanzaWriterCountDownLatch.await(timeout, timeunit);
+ }
}
public boolean isActive() {
diff --git a/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java b/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java
index b242cd568..4ee5a6a4e 100644
--- a/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java
+++ b/src/main/java/de/pixart/messenger/xmpp/XmppConnection.java
@@ -1517,9 +1517,7 @@ public class XmppConnection implements Runnable {
final Socket currentSocket = this.socket;
final CountDownLatch streamCountDownLatch = this.mStreamCountDownLatch;
try {
- for (int i = 0; i <= 10 && !currentTagWriter.finished() && !currentSocket.isClosed(); ++i) {
- Thread.sleep(100);
- }
+ currentTagWriter.await(1, TimeUnit.SECONDS);
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": closing stream");
currentTagWriter.writeTag(Tag.end("stream:stream"));
if (streamCountDownLatch != null) {
@@ -1542,14 +1540,6 @@ public class XmppConnection implements Runnable {
}
}
- private static void uninterruptedSleep(int time) {
- try {
- Thread.sleep(time);
- } catch (InterruptedException e) {
- //ignore
- }
- }
-
public void resetStreamId() {
this.streamId = null;
}