yaxim-org / yaxim

yaxim - a lean XMPP/Jabber client for Android
https://yaxim.org
GNU General Public License v3.0
486 stars 238 forks source link

Changing nickname in unresponsive MUC hangs everything #261

Open ge0rg opened 4 years ago

ge0rg commented 4 years ago

When changing the nickname in a MUC that doesn't respond, the background thread will apparently block until the request times out (30s).

From yaxim-muc-hang.txt:

04-25 19:38:45.363 14400  8819 D yaxim.SmackableImp: room xmpp@chat.yax.im: changing nickname to 🤷<200d>♂️
04-25 19:38:45.365 14400 30247 D SMACK   : SENT (0): <presence to='xmpp@chat.yax.im/🤷<200d>♂️' id='wB4n4-333899'><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='https://yaxim.org/' ver='PNyKvAFdHcM4HyMVijywvPee9+o='/></presence>
04-25 19:39:15.365 14400  8819 E yaxim.SmackableImp: Changing nickname failed.
04-25 19:39:15.365 14400  8819 W System.err: org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 30000ms (~30s). Waited for response using: AndFilter: (FromMatchesFilter (full): xmpp@chat.yax.im/🤷<200d>♂️, StanzaTypeFilter: Presence).
04-25 19:39:15.365 14400  8819 W System.err:    at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:265)
04-25 19:39:15.366 14400  8819 W System.err:    at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:219)
04-25 19:39:15.366 14400  8819 W System.err:    at org.jivesoftware.smackx.muc.MultiUserChat.changeNickname(MultiUserChat.java:1239)
04-25 19:39:15.366 14400  8819 W System.err:    at org.yaxim.androidclient.service.SmackableImp.syncDbRooms(SmackableImp.java:2582)
04-25 19:39:15.366 14400  8819 W System.err:    at org.yaxim.androidclient.service.XMPPService$2$1.run(XMPPService.java:243)
[...]
04-25 20:42:15.970  5010  5058 W BroadcastQueue: Receiver during timeout of BroadcastRecord{1d60bc8 u0 org.yaxim.androidclient.PING_ALARM} : BroadcastFilter{ab6ea7f 10409/u0 ReceiverList{7abbf9e 14400 org.yaxim.androidclient/10409/u0 remote:94e49d9}}
04-25 20:42:16.140 14400 14400 E yaxim.SmackableImp: Changing nickname failed.
04-25 20:42:16.140 14400 14400 W System.err: org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 30000ms (~30s). Waited for response using: AndFilter: (FromMatchesFilter (full): xmpp@chat.yax.im/🤷<200d>♂️, StanzaTypeFilter: Presence).
04-25 20:42:16.141 14400 14400 W System.err:    at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:265)
04-25 20:42:16.141 14400 14400 W System.err:    at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:219)
04-25 20:42:16.141 14400 14400 W System.err:    at org.jivesoftware.smackx.muc.MultiUserChat.changeNickname(MultiUserChat.java:1239)
04-25 20:42:16.141 14400 14400 W System.err:    at org.yaxim.androidclient.service.SmackableImp.syncDbRooms(SmackableImp.java:2582)
04-25 20:42:16.142 14400 14400 W System.err:    at org.yaxim.androidclient.service.SmackableImp$PingAlarmReceiver.onReceive(SmackableImp.java:1626)
04-25 20:42:16.142 14400 14400 W System.err:    at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0$LoadedApk$ReceiverDispatcher$Args(LoadedApk.java:1646)
04-25 20:42:16.142 14400 14400 W System.err:    at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
04-25 20:42:16.142 14400 14400 W System.err:    at android.os.Handler.handleCallback(Handler.java:883)
04-25 20:42:16.142 14400 14400 W System.err:    at android.os.Handler.dispatchMessage(Handler.java:100)
04-25 20:42:16.142 14400 14400 W System.err:    at android.os.Looper.loop(Looper.java:237)
04-25 20:42:16.142 14400 14400 W System.err:    at android.app.ActivityThread.main(ActivityThread.java:7804)
04-25 20:42:16.143 14400 14400 W System.err:    at java.lang.reflect.Method.invoke(Native Method)
04-25 20:42:16.143 14400 14400 W System.err:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
04-25 20:42:16.143 14400 14400 W System.err:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
04-25 20:42:16.169 14400 14400 D yaxim.RosterProvider: notifying change
04-25 20:42:16.181 14400  2383 W m.androidclien: Long monitor contention with owner Smack Cached Executor (2371) at void org.yaxim.androidclient.service.SmackableImp.syncDbRooms()(SmackableImp.java:-1) waiters=2 in boolean org.yaxim.androidclient.service.SmackableImp.joinRoom(java.lang.String, java.lang.String, java.lang.String) for 40.306s