From 29af92cbd1d691e76f5137fe2e4d7cfcf4545577 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Fri, 15 Mar 2019 09:43:09 +0100 Subject: [PATCH 1/3] Smack 4.3.4-SNAPSHOT --- version.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.gradle b/version.gradle index 85012ef33..82e39bdf3 100644 --- a/version.gradle +++ b/version.gradle @@ -1,7 +1,7 @@ allprojects { ext { - shortVersion = '4.3.3' - isSnapshot = false + shortVersion = '4.3.4' + isSnapshot = true // When using dynamic versions for those, do *not* use [1.0, // 2.0), since this will also pull in 2.0-alpha1. Instead use // [1.0, 1.0.99]. From 3ded023629e1d90365d95e2857230a8086d4e67a Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 16 Mar 2019 10:27:18 +0100 Subject: [PATCH 2/3] Remove 'synchronized' from notifyConnectionError() as it is not neccessary and causes stalls and deadlocks with a concurrent connect()/login() (which could be resolved interrupting the connect()/login() calling thread): "Smack Reader (0)" daemon prio=5 tid=21 Blocked | group="main" sCount=1 dsCount=0 obj=0x12c84670 self=0x7e072ca200 | sysTid=14965 nice=0 cgrp=default sched=0/0 handle=0x7e06155450 | state=S schedstat=( 63430626 3034269 21 ) utm=5 stm=0 core=2 HZ=100 | stack=0x7e06053000-0x7e06055000 stackSize=1037KB | held mutexes= at org.jivesoftware.smack.tcp.XMPPTCPConnection.notifyConnectionError(XMPPTCPConnection.java:-1) - waiting to lock <0x0ec6e6bb> (a org.jivesoftware.smack.tcp.XMPPTCPConnection) held by thread 22 at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$3900(XMPPTCPConnection.java:154) at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1330) at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$900(XMPPTCPConnection.java:1064) at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:1081) at java.lang.Thread.run(Thread.java:761) "connect" prio=5 tid=22 Waiting | group="main" sCount=1 dsCount=0 obj=0x12c8e820 self=0x7e19bcd600 | sysTid=15047 nice=0 cgrp=default sched=0/0 handle=0x7e05ee4450 | state=S schedstat=( 14067083 7475835 14 ) utm=1 stm=0 core=0 HZ=100 | stack=0x7e05de2000-0x7e05de4000 stackSize=1037KB | held mutexes= at java.lang.Object.wait!(Native method) - waiting on <0x0c058b14> (a java.lang.Object) at java.lang.Thread.parkFor$(Thread.java:2127) - locked <0x0c058b14> (a java.lang.Object) at sun.misc.Unsafe.park(Unsafe.java:325) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:161) at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:840) at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:994) at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1303) at java.util.concurrent.Semaphore.acquire(Semaphore.java:446) at org.jivesoftware.smack.tcp.XMPPTCPConnection.initConnection(XMPPTCPConnection.java:685) at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:942) at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:417) - locked <0x0ec6e6bb> (a org.jivesoftware.smack.tcp.XMPPTCPConnection) at org.yaxim.androidclient.service.SmackableImp.connectAndLogin(SmackableImp.java:717) - locked <0x0ec6e6bb> (a org.jivesoftware.smack.tcp.XMPPTCPConnection) at org.yaxim.androidclient.service.SmackableImp.doConnect(SmackableImp.java:304) at org.yaxim.androidclient.service.SmackableImp$5.run(SmackableImp.java:391) --- .../main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java index 61de855d6..b0fcb8b7d 100644 --- a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java +++ b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java @@ -953,7 +953,7 @@ public class XMPPTCPConnection extends AbstractXMPPConnection { * * @param e the exception that causes the connection close event. */ - private synchronized void notifyConnectionError(final Exception e) { + private void notifyConnectionError(final Exception e) { ASYNC_BUT_ORDERED.performAsyncButOrdered(this, new Runnable() { @Override public void run() { From 7059b60672628d1427776a794d396fb09b2ed42b Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 16 Mar 2019 11:11:58 +0100 Subject: [PATCH 3/3] Wait for reader/writer thread termination at the end of shutdown() This synchronizes the place with what the master branch currently does. --- .../org/jivesoftware/smack/tcp/XMPPTCPConnection.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java index b0fcb8b7d..bf4409506 100644 --- a/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java +++ b/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/XMPPTCPConnection.java @@ -561,6 +561,10 @@ public class XMPPTCPConnection extends AbstractXMPPConnection { writer = null; initState(); + + // Wait for reader and writer threads to be terminated. + readerWriterSemaphore.acquireUninterruptibly(2); + readerWriterSemaphore.release(2); } @Override @@ -978,10 +982,6 @@ public class XMPPTCPConnection extends AbstractXMPPConnection { // Note that a connection listener of XMPPTCPConnection will drop the SM state in // case the Exception is a StreamErrorException. instantShutdown(); - - // Wait for reader and writer threads to be terminated. - readerWriterSemaphore.acquireUninterruptibly(2); - readerWriterSemaphore.release(2); } Async.go(new Runnable() {