MQTT Client: Check for connection before sending disconnect message

Closes https://github.com/espressif/esp-idf/issues/3619
Closes https://github.com/espressif/esp-mqtt/issues/120
Merges https://github.com/espressif/esp-mqtt/pull/118

Signed-off-by: David Cermak <cermak@espressif.com>
This commit is contained in:
Gregory Eslinger
2019-06-11 19:57:58 +02:00
committed by David Cermak
parent 11f884623b
commit 7223302deb

View File

@ -1134,13 +1134,16 @@ esp_err_t esp_mqtt_client_reconnect(esp_mqtt_client_handle_t client)
esp_err_t esp_mqtt_client_stop(esp_mqtt_client_handle_t client)
{
if (client->run) {
// Notify the broker we are disconnecting
MQTT_API_LOCK_FROM_OTHER_TASK(client);
client->mqtt_state.outbound_message = mqtt_msg_disconnect(&client->mqtt_state.mqtt_connection);
if (mqtt_write_data(client) != ESP_OK) {
ESP_LOGE(TAG, "Error sending disconnect message");
// Only send the disconnect message if the client is connected
if(client->state == MQTT_STATE_CONNECTED) {
// Notify the broker we are disconnecting
MQTT_API_LOCK_FROM_OTHER_TASK(client);
client->mqtt_state.outbound_message = mqtt_msg_disconnect(&client->mqtt_state.mqtt_connection);
if (mqtt_write_data(client) != ESP_OK) {
ESP_LOGE(TAG, "Error sending disconnect message");
}
MQTT_API_UNLOCK_FROM_OTHER_TASK(client);
}
MQTT_API_UNLOCK_FROM_OTHER_TASK(client);
client->run = false;
xEventGroupWaitBits(client->status_bits, STOPPED_BIT, false, true, portMAX_DELAY);