paho.mqtt.java icon indicating copy to clipboard operation
paho.mqtt.java copied to clipboard

Dead connection stuck forever if connection hangs before MqttConnack

Open fitermay opened this issue 1 year ago • 0 comments

Please fill out the form below before submitting, thank you!

  • [ X] Bug exists Release Version 1.2.5 ( Master Branch)
  • [ ] Bug exists in MQTTv3 Client on Snapshot Version 1.2.6-SNAPSHOT (Develop Branch) - Probably
  • [ ] Bug exists in MQTTv5 Client on Snapshot Version 1.2.6-SNAPSHOT (Develop Branch) - Probably

Diagnostics: -- Mqtt Rec/Mqtt Snd/Mqtt Rec threads are running -- Mqtt Ping sender thread has not been started yet -- The connection is dead and has been hanging for days -- Mqtt Rec thread keeps looping into readMqttWireMessage

My Analysis: -- The keep alive mechanism fails and a dead connection appears to hang forever if the socket hangs after the connection is established but before MqttConnack is received. The keep-alive The pingSender keep-alive mechanism is initialized only upon a successful receipt of MqttConnack message. If the client connects but then doesn't receive a response to MqttConnect, there does not appear to be a time-out disconnect mechanism.

Partial Thread Dump:

"MQTT Rec: ...." daemon prio=5 tid=22 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12d022a0 self=0x97a5a000
  | sysTid=12207 nice=0 cgrp=default sched=0/0 handle=0x96b7f970
  | state=S schedstat=( 1688215063136 59566797290 2969618 ) utm=141496 stm=27325 core=3 HZ=100
  | stack=0x96a7c000-0x96a7e000 stackSize=1042KB
  | held mutexes=
  native: #00 pc 00053d18  /system/lib/libc.so (__ppoll+20)
  native: #01 pc 000234ed  /system/lib/libc.so (poll+48)
  native: #02 pc 0002122f  /system/lib/libjavacrypto.so (sslSelect(_JNIEnv*, int, _jobject*, conscrypt::AppData*, int)+166)
  native: #03 pc 00021589  /system/lib/libjavacrypto.so (sslRead(_JNIEnv*, ssl_st*, _jobject*, _jobject*, char*, int, conscrypt::SslError*, int)+572)
  native: #04 pc 00019efb  /system/lib/libjavacrypto.so (NativeCrypto_SSL_read(_JNIEnv*, _jclass*, long long, _jobject*, _jobject*, _jobject*, _jbyteArray*, int, int, int)+346)
  at com.android.org.conscrypt.NativeCrypto.SSL_read(Native method)
  at com.android.org.conscrypt.NativeSsl.read(NativeSsl.java:399)
  at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:546)
  - locked <0x0dad74e4> (a java.lang.Object)
  at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:517)
  at java.io.DataInputStream.readByte(DataInputStream.java:268)
  at org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage(MqttInputStream.java:92)
  at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:137)
  at java.lang.Thread.run(Thread.java:764)

"MQTT Snd: ....  daemon prio=5 tid=23 Waiting
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12d02c98 self=0x97a5ac00
  | sysTid=12208 nice=0 cgrp=default sched=0/0 handle=0x96973970
  | state=S schedstat=( 1648002 341229 6 ) utm=0 stm=0 core=2 HZ=100
  | stack=0x96870000-0x96872000 stackSize=1042KB
  | held mutexes=
  at java.lang.Object.wait(Native method)
  - waiting on <0x08d06d4d> (a java.lang.Object)
  at org.eclipse.paho.client.mqttv3.internal.ClientState.get(ClientState.java:833)
  - locked <0x08d06d4d> (a java.lang.Object)
  at org.eclipse.paho.client.mqttv3.internal.CommsSender.run(CommsSender.java:129)
  at java.lang.Thread.run(Thread.java:764)

"MQTT Call: ... Waiting
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x12d03388 self=0x97a5b200
  | sysTid=12209 nice=0 cgrp=default sched=0/0 handle=0x9686d970
  | state=S schedstat=( 453154 0 1 ) utm=0 stm=0 core=0 HZ=100
  | stack=0x9676a000-0x9676c000 stackSize=1042KB
  | held mutexes=
  at java.lang.Object.wait(Native method)
  - waiting on <0x089a3002> (a java.lang.Object)
  at org.eclipse.paho.client.mqttv3.internal.CommsCallback.run(CommsCallback.java:181)
  - locked <0x089a3002> (a java.lang.Object)
  at java.lang.Thread.run(Thread.java:764)

fitermay avatar Dec 18 '23 03:12 fitermay