fixed memory leak in MQTT extended log

This commit is contained in:
Bogdan Pilyugin 2024-02-22 12:18:00 +02:00
parent 133dc249c7
commit 369b236549

View File

@ -214,9 +214,9 @@ static void mqtt_system_event_handler(int idx, void *handler_args, esp_event_bas
ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED client %d", idx); ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED client %d", idx);
#endif #endif
ComposeTopic(topic, idx, SERVICE_NAME, DOWNLINK_SUBTOPIC); ComposeTopic(topic, idx, SERVICE_NAME, DOWNLINK_SUBTOPIC);
msg_id = esp_mqtt_client_subscribe(client, (char*) topic, 0); msg_id = esp_mqtt_client_subscribe(client, (char*) topic, 0);
#if MQTT_DEBUG_MODE > 0 #if MQTT_DEBUG_MODE > 0
ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id);
ESP_LOGI(TAG, "Subscribe to %s", topic); ESP_LOGI(TAG, "Subscribe to %s", topic);
#endif #endif
#ifdef CONFIG_WEBGUIAPP_UART_TRANSPORT_ENABLE #ifdef CONFIG_WEBGUIAPP_UART_TRANSPORT_ENABLE
@ -395,10 +395,10 @@ void MQTTTaskTransmit(void *pvParameter)
DSS.data_length, DSS.data_length,
0, 0); 0, 0);
} }
//else
// ESP_LOGW(TAG, "MQTT client not initialized or disconnected");
if (!DSS.keep_memory_onfinish) if (!DSS.keep_memory_onfinish)
{
free(DSS.raw_data_ptr); free(DSS.raw_data_ptr);
}
} }
} }
@ -516,8 +516,8 @@ esp_err_t ExtendedLog(esp_log_level_t level, char *format, ...)
if (data == NULL) if (data == NULL)
return ESP_ERR_NO_MEM; return ESP_ERR_NO_MEM;
vsnprintf(data, MAX_MQTT_LOG_MESSAGE, format, arg); vsnprintf(data, MAX_MQTT_LOG_MESSAGE, format, arg);
if(strlen(data) == MAX_MQTT_LOG_MESSAGE - 1) if (strlen(data) == MAX_MQTT_LOG_MESSAGE - 1)
for(int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
*(data + MAX_MQTT_LOG_MESSAGE - 2 - i) = '.'; *(data + MAX_MQTT_LOG_MESSAGE - 2 - i) = '.';
switch (level) switch (level)
{ {
@ -547,10 +547,11 @@ esp_err_t ExtendedLog(esp_log_level_t level, char *format, ...)
strcpy(buf, time); strcpy(buf, time);
strcat(buf, " "); strcat(buf, " ");
strcat(buf, data); strcat(buf, data);
MQTT_DATA_SEND_STRUCT DSS; MQTT_DATA_SEND_STRUCT DSS = {0};
ComposeTopic(DSS.topic, idx, "LOG", "UPLINK"); ComposeTopic(DSS.topic, idx, "LOG", "UPLINK");
DSS.raw_data_ptr = buf; DSS.raw_data_ptr = buf;
DSS.data_length = strlen(buf); DSS.data_length = strlen(buf);
DSS.keep_memory_onfinish = false;
if (xQueueSend(GetMQTTHandlesPool(idx)->mqtt_queue, &DSS, pdMS_TO_TICKS(0)) != pdPASS) if (xQueueSend(GetMQTTHandlesPool(idx)->mqtt_queue, &DSS, pdMS_TO_TICKS(0)) != pdPASS)
free(buf); free(buf);
continue; continue;