int MQTTClient_cleanSession(Clients* client) { int rc = 0; FUNC_ENTRY; #if !defined(NO_PERSISTENCE) rc = MQTTPersistence_clear(client); #endif MQTTProtocol_emptyMessageList(client->inboundMsgs); MQTTProtocol_emptyMessageList(client->outboundMsgs); MQTTClient_emptyMessageQueue(client); client->msgID = 0; FUNC_EXIT_RC(rc); return rc; }
void MQTTClient_destroy(MQTTClient* handle) { MQTTClients* m = *handle; FUNC_ENTRY; Thread_lock_mutex(mqttclient_mutex); if (m == NULL) goto exit; if (m->c) { int saved_socket = m->c->net.socket; char* saved_clientid = malloc(strlen(m->c->clientID)+1); strcpy(saved_clientid, m->c->clientID); #if !defined(NO_PERSISTENCE) MQTTPersistence_close(m->c); #endif MQTTClient_emptyMessageQueue(m->c); MQTTProtocol_freeClient(m->c); if (!ListRemove(bstate->clients, m->c)) Log(LOG_ERROR, 0, NULL); else Log(TRACE_MIN, 1, NULL, saved_clientid, saved_socket); free(saved_clientid); } if (m->serverURI) free(m->serverURI); Thread_destroy_sem(m->connect_sem); Thread_destroy_sem(m->connack_sem); Thread_destroy_sem(m->suback_sem); Thread_destroy_sem(m->unsuback_sem); if (!ListRemove(handles, m)) Log(LOG_ERROR, -1, "free error"); *handle = NULL; if (bstate->clients->count == 0) MQTTClient_terminate(); exit: Thread_unlock_mutex(mqttclient_mutex); FUNC_EXIT; }