From 3352c833b8a11c2324ca7e685b043c9353a1edbf Mon Sep 17 00:00:00 2001 From: patrick Date: Wed, 22 Nov 2023 20:35:40 -0500 Subject: [PATCH] - Fix memory leak by calling delete _server in the WebSocketsServer destructor. - Improve performance by looking for match to existing socket before creating a new one --- src/WebSocketsServer.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index 79a52ce..dc1a494 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -65,6 +65,7 @@ WebSocketsServerCore::~WebSocketsServerCore() { } WebSocketsServer::~WebSocketsServer() { + delete _server; } /** @@ -428,8 +429,16 @@ WSclient_t * WebSocketsServerCore::newClient(WEBSOCKETS_NETWORK_CLASS * TCPclien for(uint8_t i = 0; i < WEBSOCKETS_SERVER_CLIENT_MAX; i++) { client = &_clients[i]; + // look for match to existing socket before creating a new one + if (clientIsConnected(client)) + { + // Check to see if it is the same socket - if so, return it + if (client->tcp->getSocketNumber() == TCPclient->getSocketNumber()) + { + return client; + } + } else { // state is not connected or tcp connection is lost - if(!clientIsConnected(client)) { client->tcp = TCPclient; #if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32)