From c1ac44a08322e101e2677b7c8d280ec427dc5807 Mon Sep 17 00:00:00 2001 From: Huang Rui Date: Tue, 23 Aug 2016 17:35:31 +0800 Subject: [PATCH] Clear callback functions to avoid abnormal callback --- mqtt/mqtt.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/mqtt/mqtt.c b/mqtt/mqtt.c index ffedcc1..b29830b 100644 --- a/mqtt/mqtt.c +++ b/mqtt/mqtt.c @@ -158,7 +158,7 @@ void ICACHE_FLASH_ATTR mqtt_tcpclient_delete(MQTT_Client *mqttClient) { if (mqttClient->pCon != NULL) { - INFO("Free memory\r\n"); + INFO("TCP: Free memory\r\n"); // Force abort connections espconn_abort(mqttClient->pCon); // Delete connections @@ -251,7 +251,16 @@ mqtt_client_delete(MQTT_Client *mqttClient) mqttClient->msgQueue.buf = NULL; } + // Initialize state mqttClient->connState = WIFI_INIT; + // Clear callback functions to avoid abnormal callback + mqttClient->connectedCb = NULL; + mqttClient->disconnectedCb = NULL; + mqttClient->publishedCb = NULL; + mqttClient->timeoutCb = NULL; + mqttClient->dataCb = NULL; + + INFO("MQTT: client already deleted\r\n"); } @@ -275,6 +284,7 @@ mqtt_tcpclient_recv(void *arg, char *pdata, unsigned short len) client->keepAliveTick = 0; READPACKET: INFO("TCP: data received %d bytes\r\n", len); + // INFO("STATE: %d\r\n", client->connState); if (len < MQTT_BUF_SIZE && len > 0) { os_memcpy(client->mqtt_state.in_buffer, pdata, len); @@ -726,7 +736,7 @@ void ICACHE_FLASH_ATTR MQTT_InitConnection(MQTT_Client *mqttClient, uint8_t* host, uint32_t port, uint8_t security) { uint32_t temp; - INFO("MQTT_InitConnection\r\n"); + INFO("MQTT:InitConnection\r\n"); os_memset(mqttClient, 0, sizeof(MQTT_Client)); temp = os_strlen(host); mqttClient->host = (uint8_t*)os_zalloc(temp + 1); @@ -750,7 +760,7 @@ void ICACHE_FLASH_ATTR MQTT_InitClient(MQTT_Client *mqttClient, uint8_t* client_id, uint8_t* client_user, uint8_t* client_pass, uint32_t keepAliveTime, uint8_t cleanSession) { uint32_t temp; - INFO("MQTT_InitClient\r\n"); + INFO("MQTT:InitClient\r\n"); os_memset(&mqttClient->connect_info, 0, sizeof(mqtt_connect_info_t));