From c2f3b9f4b40a82c5287572c74b848f89717bad86 Mon Sep 17 00:00:00 2001 From: Riccardo Binetti Date: Fri, 5 Oct 2018 17:30:31 +0200 Subject: [PATCH] Fix bug in esp_mqtt_client_publish message enqueueing We have to enqueue first and then assign to outbound/pending variables, otherwise the previous pending message is lost and the publish message is present twice --- mqtt_client.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/mqtt_client.c b/mqtt_client.c index a433f4e..d513d6b 100644 --- a/mqtt_client.c +++ b/mqtt_client.c @@ -859,16 +859,20 @@ int esp_mqtt_client_publish(esp_mqtt_client_handle_t client, const char *topic, len = strlen(data); } - client->mqtt_state.outbound_message = mqtt_msg_publish(&client->mqtt_state.mqtt_connection, - topic, data, len, - qos, retain, - &pending_msg_id); + mqtt_message_t *publish_msg = mqtt_msg_publish(&client->mqtt_state.mqtt_connection, + topic, data, len, + qos, retain, + &pending_msg_id); + + /* We have to set as pending all the qos>0 messages) */ if (qos > 0) { + mqtt_enqueue(client); + client->mqtt_state.outbound_message = publish_msg; client->mqtt_state.pending_msg_type = mqtt_get_type(client->mqtt_state.outbound_message->data); client->mqtt_state.pending_msg_id = pending_msg_id; client->mqtt_state.pending_msg_count ++; - /* Have to enqueue all the qos>0 messages) */ - mqtt_enqueue(client); + } else { + client->mqtt_state.outbound_message = publish_msg; } if (mqtt_write_data(client) != ESP_OK) {