Improve memory management

This commit is contained in:
2025-08-16 09:13:07 -04:00
parent 1da824d8cb
commit aef2d050f5
5 changed files with 82 additions and 8 deletions

View File

@@ -40,9 +40,32 @@ SocketServer::SocketServer(int port)
/// @brief Close down the listener
SocketServer::~SocketServer()
{
close();
shutdownConnectionReceivers();
join(); // Then join all socket threads
close(); // close the listener socket
}
/// @brief Join all threads
/// @param
void SocketServer::join(void)
{
for (std::thread& executionThread : mExecutionThreads)
{
if (executionThread.joinable())
{
executionThread.join();
}
}
}
/// @brief Remove object references to the connection receivers. This will force socket threads to exit and close connections
void SocketServer::shutdownConnectionReceivers()
{
mSocketConnectionReceivers.remove();
}
/// @brief returns true if we have a valid socket connection otherwise false
/// @return
bool SocketServer::isOkay(void)
@@ -75,8 +98,14 @@ void SocketServer::listen(void)
close();
return;
}
SocketConnectionReceiver socketConnectionReceiver(socket, internalSocketAddress);
mExecutionThreads.push_back(std::thread(&SocketConnectionReceiver::threadFunction, &socketConnectionReceiver, 0));
mSocketConnectionReceivers.insert(SmartPointer<SocketConnectionReceiver>());
SmartPointer<SocketConnectionReceiver> &pSocketConnectionReceiver = mSocketConnectionReceivers[mSocketConnectionReceivers.size()-1];
pSocketConnectionReceiver = ::new SocketConnectionReceiver(socket, internalSocketAddress);
pSocketConnectionReceiver.disposition(PointerDisposition::Delete);
mExecutionThreads.push_back(std::thread(&SocketConnectionReceiver::threadFunction, *pSocketConnectionReceiver, 0));
// SocketConnectionReceiver socketConnectionReceiver(socket, internalSocketAddress);
// mExecutionThreads.push_back(std::thread(&SocketConnectionReceiver::threadFunction, &socketConnectionReceiver, 0));
}
}