@@ -340,22 +340,19 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {
340
340
341
341
void AsyncMqttClient::_onDisconnect (AsyncClient* client) {
342
342
(void )client;
343
- AsyncMqttClientDisconnectReason reason;
343
+ if (!_disconnectFlagged) {
344
+ AsyncMqttClientDisconnectReason reason;
344
345
345
- if (_connectPacketNotEnoughSpace) {
346
- reason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
347
- } else if (_tlsBadFingerprint) {
348
- reason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
349
- } else {
350
- reason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED;
346
+ if (_connectPacketNotEnoughSpace) {
347
+ reason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
348
+ } else if (_tlsBadFingerprint) {
349
+ reason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
350
+ } else {
351
+ reason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED;
352
+ }
353
+ for (auto callback : _onDisconnectUserCallbacks) callback (reason);
351
354
}
352
-
353
355
_clear ();
354
-
355
- for (auto callback : _onDisconnectUserCallbacks) callback (reason);
356
-
357
- _connectPacketNotEnoughSpace = false ;
358
- _tlsBadFingerprint = false ;
359
356
}
360
357
361
358
void AsyncMqttClient::_onError (AsyncClient* client, int8_t error) {
@@ -488,8 +485,8 @@ void AsyncMqttClient::_onConnAck(bool sessionPresent, uint8_t connectReturnCode)
488
485
_connected = true ;
489
486
for (auto callback : _onConnectUserCallbacks) callback (sessionPresent);
490
487
} else {
491
- _clear ();
492
488
for (auto callback : _onDisconnectUserCallbacks) callback (static_cast <AsyncMqttClientDisconnectReason>(connectReturnCode));
489
+ _disconnectFlagged = true ;
493
490
}
494
491
}
495
492
@@ -657,6 +654,8 @@ void AsyncMqttClient::_sendAcks() {
657
654
}
658
655
659
656
bool AsyncMqttClient::_sendDisconnect () {
657
+ if (!_connected) return true ;
658
+
660
659
const uint8_t neededSpace = 2 ;
661
660
662
661
SEMAPHORE_TAKE (false );
0 commit comments