race condition in disconnect resolved

add-license-1
Martin Ger 2018-01-13 16:32:55 +01:00
rodzic 560ccfa374
commit 3ab1b43169
2 zmienionych plików z 16 dodań i 3 usunięć

Wyświetl plik

@ -71,6 +71,7 @@ typedef enum {
TCP_DISCONNECTING,
TCP_DISCONNECTED,
TCP_DISCONNECT,
TCP_CLIENT_DISCONNECTED,
TCP_RECONNECT_DISCONNECTING,
TCP_RECONNECT_REQ,
TCP_RECONNECT,

Wyświetl plik

@ -127,7 +127,7 @@ static uint8_t shared_out_buffer[MQTT_BUF_SIZE];
bool ICACHE_FLASH_ATTR MQTT_server_initClientCon(MQTT_ClientCon * mqttClientCon) {
uint32_t temp;
MQTT_INFO("MQTT:InitClientCon\r\n");
MQTT_INFO("MQTT: InitClientCon\r\n");
mqttClientCon->connState = TCP_CONNECTED;
@ -162,11 +162,17 @@ uint16_t ICACHE_FLASH_ATTR MQTT_server_countClientCon() {
}
bool ICACHE_FLASH_ATTR MQTT_server_deleteClientCon(MQTT_ClientCon * mqttClientCon) {
MQTT_INFO("MQTT:DeleteClientCon\r\n");
MQTT_INFO("MQTT: DeleteClientCon\r\n");
if (mqttClientCon == NULL)
return;
if (mqttClientCon->connState == TCP_DISCONNECT) {
MQTT_INFO("MQTT: Broker already disconnecting\r\n");
mqttClientCon->connState = TCP_CLIENT_DISCONNECTED;
return;
}
os_timer_disarm(&mqttClientCon->mqttTimer);
if (mqttClientCon->pCon != NULL) {
@ -270,7 +276,7 @@ void ICACHE_FLASH_ATTR MQTT_server_cleanupClientCons() {
}
void ICACHE_FLASH_ATTR MQTT_server_disconnectClientCon(MQTT_ClientCon * mqttClientCon) {
MQTT_INFO("MQTT:ServerDisconnect\r\n");
MQTT_INFO("MQTT: ServerDisconnect\r\n");
mqttClientCon->mqtt_state.message_length_read = 0;
mqttClientCon->connState = TCP_DISCONNECT;
@ -876,6 +882,12 @@ void ICACHE_FLASH_ATTR MQTT_ServerTask(os_event_t * e) {
MQTT_INFO("MQTT: Disconnect\r\n");
espconn_disconnect(clientcon->pCon);
break;
case TCP_CLIENT_DISCONNECTED:
MQTT_INFO("MQTT: Client disconnected\r\n");
MQTT_server_deleteClientCon(clientcon);
break;
case TCP_DISCONNECTING:
case MQTT_DATA:
if (!QUEUE_IsEmpty(&clientcon->msgQueue) && clientcon->sendTimeout == 0 &&