From 3ded023629e1d90365d95e2857230a8086d4e67a Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 16 Mar 2019 10:27:18 +0100 Subject: [PATCH] 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() {