Improve memory management
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user