kopia lustrzana https://github.com/martin-ger/uMQTTBroker
race condition in disconnect resolved
rodzic
560ccfa374
commit
3ab1b43169
|
@ -71,6 +71,7 @@ typedef enum {
|
||||||
TCP_DISCONNECTING,
|
TCP_DISCONNECTING,
|
||||||
TCP_DISCONNECTED,
|
TCP_DISCONNECTED,
|
||||||
TCP_DISCONNECT,
|
TCP_DISCONNECT,
|
||||||
|
TCP_CLIENT_DISCONNECTED,
|
||||||
TCP_RECONNECT_DISCONNECTING,
|
TCP_RECONNECT_DISCONNECTING,
|
||||||
TCP_RECONNECT_REQ,
|
TCP_RECONNECT_REQ,
|
||||||
TCP_RECONNECT,
|
TCP_RECONNECT,
|
||||||
|
|
|
@ -127,7 +127,7 @@ static uint8_t shared_out_buffer[MQTT_BUF_SIZE];
|
||||||
|
|
||||||
bool ICACHE_FLASH_ATTR MQTT_server_initClientCon(MQTT_ClientCon * mqttClientCon) {
|
bool ICACHE_FLASH_ATTR MQTT_server_initClientCon(MQTT_ClientCon * mqttClientCon) {
|
||||||
uint32_t temp;
|
uint32_t temp;
|
||||||
MQTT_INFO("MQTT:InitClientCon\r\n");
|
MQTT_INFO("MQTT: InitClientCon\r\n");
|
||||||
|
|
||||||
mqttClientCon->connState = TCP_CONNECTED;
|
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) {
|
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)
|
if (mqttClientCon == NULL)
|
||||||
return;
|
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);
|
os_timer_disarm(&mqttClientCon->mqttTimer);
|
||||||
|
|
||||||
if (mqttClientCon->pCon != NULL) {
|
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) {
|
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->mqtt_state.message_length_read = 0;
|
||||||
mqttClientCon->connState = TCP_DISCONNECT;
|
mqttClientCon->connState = TCP_DISCONNECT;
|
||||||
|
@ -876,6 +882,12 @@ void ICACHE_FLASH_ATTR MQTT_ServerTask(os_event_t * e) {
|
||||||
MQTT_INFO("MQTT: Disconnect\r\n");
|
MQTT_INFO("MQTT: Disconnect\r\n");
|
||||||
espconn_disconnect(clientcon->pCon);
|
espconn_disconnect(clientcon->pCon);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TCP_CLIENT_DISCONNECTED:
|
||||||
|
MQTT_INFO("MQTT: Client disconnected\r\n");
|
||||||
|
MQTT_server_deleteClientCon(clientcon);
|
||||||
|
break;
|
||||||
|
|
||||||
case TCP_DISCONNECTING:
|
case TCP_DISCONNECTING:
|
||||||
case MQTT_DATA:
|
case MQTT_DATA:
|
||||||
if (!QUEUE_IsEmpty(&clientcon->msgQueue) && clientcon->sendTimeout == 0 &&
|
if (!QUEUE_IsEmpty(&clientcon->msgQueue) && clientcon->sendTimeout == 0 &&
|
||||||
|
|
Ładowanie…
Reference in New Issue