...
 
Commits (3)
    https://gitcode.net/awesome-mirrors/eclipse/paho.mqtt.c/-/commit/a9a8ea56193e47bec5a21be9b3f7b35303736a81 Lock socket mutex on socket close #1219 2023-05-25T10:04:21+01:00 Ian Craggs icraggs@gmail.com https://gitcode.net/awesome-mirrors/eclipse/paho.mqtt.c/-/commit/5ce322200da388636e70a351d7e3d641579dabfd Free some allocated test memory 2023-05-25T10:04:48+01:00 Ian Craggs icraggs@gmail.com https://gitcode.net/awesome-mirrors/eclipse/paho.mqtt.c/-/commit/9613cf419c53390beb6c3392bf320cd63556e6f2 Free some allocated memory under some circumstances 2023-05-25T10:05:14+01:00 Ian Craggs icraggs@gmail.com
......@@ -2390,12 +2390,12 @@ static void MQTTAsync_closeOnly(Clients* client, enum MQTTReasonCodes reasonCode
client->session = NULL; /* show the session has been freed */
SSLSocket_close(&client->net);
#endif
Socket_close(client->net.socket);
MQTTAsync_unlock_mutex(socket_mutex);
Socket_close(client->net.socket); /* Socket_close locks socket mutex itself */
client->net.socket = 0;
#if defined(OPENSSL)
client->net.ssl = NULL;
#endif
MQTTAsync_unlock_mutex(socket_mutex);
}
client->connected = 0;
client->connect_state = NOT_IN_PROGRESS;
......
......@@ -1095,8 +1095,8 @@ static void MQTTClient_closeSession(Clients* client, enum MQTTReasonCodes reason
client->session = NULL; /* show the session has been freed */
SSLSocket_close(&client->net);
#endif
Socket_close(client->net.socket);
Thread_unlock_mutex(socket_mutex);
Socket_close(client->net.socket);
client->net.socket = 0;
#if defined(OPENSSL)
client->net.ssl = NULL;
......
/*******************************************************************************
* Copyright (c) 2009, 2022 IBM Corp.
* Copyright (c) 2009, 2023 IBM Corp.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
......@@ -340,16 +340,29 @@ int MQTTPersistence_restorePackets(Clients *c)
buffer = NULL;
}
if (msgkeys[i])
{
free(msgkeys[i]);
msgkeys[i] = NULL;
}
i++;
}
if (msgkeys)
free(msgkeys);
}
Log(TRACE_MINIMUM, -1, "%d sent messages and %d received messages restored for client %s\n",
msgs_sent, msgs_rcvd, c->clientID);
MQTTPersistence_wrapMsgID(c);
exit:
if (msgkeys)
{
int i = 0;
for (i = 0; i < nkeys; ++i)
{
if (msgkeys[i])
free(msgkeys[i]);
}
free(msgkeys);
}
if (buffer)
free(buffer);
FUNC_EXIT_RC(rc);
return rc;
}
......
......@@ -965,6 +965,7 @@ int Socket_close(SOCKET socket)
int rc = 0;
FUNC_ENTRY;
Thread_lock_mutex(socket_mutex);
Socket_close_only(socket);
Socket_abortWrite(socket);
SocketBuffer_cleanup(socket);
......@@ -1032,6 +1033,7 @@ int Socket_close(SOCKET socket)
else
Log(LOG_ERROR, -1, "Failed to remove socket %d", socket);
exit:
Thread_unlock_mutex(socket_mutex);
FUNC_EXIT_RC(rc);
return rc;
}
......@@ -1220,9 +1222,7 @@ int Socket_new(const char* addr, size_t addr_len, int port, SOCKET* sock)
as reported in https://github.com/eclipse/paho.mqtt.c/issues/135 */
if (rc != 0 && (rc != EINPROGRESS) && (rc != EWOULDBLOCK))
{
Thread_lock_mutex(socket_mutex);
Socket_close(*sock); /* close socket and remove from our list of sockets */
Thread_unlock_mutex(socket_mutex);
*sock = SOCKET_ERROR; /* as initialized before */
}
}
......
/*******************************************************************************
* Copyright (c) 2009, 2020 IBM Corp. and others
* Copyright (c) 2009, 2023 IBM Corp. and others
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
......@@ -1281,6 +1281,7 @@ int test_qos_1_2_errors(struct Options options)
exit:
MQTTClient_setTraceCallback(NULL);
MQTTProperties_free(&props);
MQTTProperties_free(&pubmsg.properties);
MQTTClient_destroy(&c);
MyLog(LOGA_INFO, "TEST6: test %s. %d tests run, %d failures.",
......