Fix some memory leaks on packet sending.

This commit is contained in:
Loic Blot 2015-02-21 17:24:27 +01:00
parent 5a5854ea9d
commit 009149a073
4 changed files with 13 additions and 12 deletions

@ -956,6 +956,7 @@ void Client::Send(NetworkPacket* pkt)
serverCommandFactoryTable[pkt->getCommand()].channel, serverCommandFactoryTable[pkt->getCommand()].channel,
pkt, pkt,
serverCommandFactoryTable[pkt->getCommand()].reliable); serverCommandFactoryTable[pkt->getCommand()].reliable);
delete pkt;
} }
void Client::interact(u8 action, const PointedThing& pointed) void Client::interact(u8 action, const PointedThing& pointed)

@ -1729,6 +1729,7 @@ void ConnectionSendThread::connect(Address address)
m_connection->SetPeerID(PEER_ID_INEXISTENT); m_connection->SetPeerID(PEER_ID_INEXISTENT);
NetworkPacket* pkt = new NetworkPacket(0,0); NetworkPacket* pkt = new NetworkPacket(0,0);
m_connection->Send(PEER_ID_SERVER, 0, pkt, true); m_connection->Send(PEER_ID_SERVER, 0, pkt, true);
delete pkt;
} }
void ConnectionSendThread::disconnect() void ConnectionSendThread::disconnect()

@ -2079,24 +2079,19 @@ void Server::sendRemoveNode(v3s16 p, u16 ignore_id,
float maxd = far_d_nodes*BS; float maxd = far_d_nodes*BS;
v3f p_f = intToFloat(p, BS); v3f p_f = intToFloat(p, BS);
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_REMOVENODE, 2 + 2 + 2); NetworkPacket* pkt = new NetworkPacket(TOCLIENT_REMOVENODE, 6);
*pkt << p; *pkt << p;
std::list<u16> clients = m_clients.getClientIDs(); std::list<u16> clients = m_clients.getClientIDs();
for(std::list<u16>::iterator for(std::list<u16>::iterator
i = clients.begin(); i = clients.begin();
i != clients.end(); ++i) i != clients.end(); ++i) {
{ if(far_players) {
if(far_players)
{
// Get player // Get player
Player *player = m_env->getPlayer(*i); if(Player *player = m_env->getPlayer(*i)) {
if(player)
{
// If player is far away, only set modified blocks not sent // If player is far away, only set modified blocks not sent
v3f player_pos = player->getPosition(); v3f player_pos = player->getPosition();
if(player_pos.getDistanceFrom(p_f) > maxd) if(player_pos.getDistanceFrom(p_f) > maxd) {
{
far_players->push_back(*i); far_players->push_back(*i);
continue; continue;
} }
@ -2118,7 +2113,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id,
v3f p_f = intToFloat(p, BS); v3f p_f = intToFloat(p, BS);
std::list<u16> clients = m_clients.getClientIDs(); std::list<u16> clients = m_clients.getClientIDs();
for(std::list<u16>::iterator for(std::list<u16>::iterator
i = clients.begin(); i = clients.begin();
i != clients.end(); ++i) i != clients.end(); ++i)
{ {
@ -2139,7 +2134,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id,
} }
} }
NetworkPacket* pkt = new NetworkPacket(TOCLIENT_ADDNODE, 0); NetworkPacket* pkt = new NetworkPacket(TOCLIENT_ADDNODE, 6 + 2 + 1 + 1 + 1);
m_clients.Lock(); m_clients.Lock();
RemoteClient* client = m_clients.lockedGetClientNoEx(*i); RemoteClient* client = m_clients.lockedGetClientNoEx(*i);
if (client != 0) { if (client != 0) {

@ -2010,6 +2010,8 @@ struct TestConnection: public TestBase
<< std::endl; << std::endl;
UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0); UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0);
delete pkt;
} }
u16 peer_id_client = 2; u16 peer_id_client = 2;
@ -2074,6 +2076,8 @@ struct TestConnection: public TestBase
UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0); UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0);
UASSERT(peer_id == PEER_ID_SERVER); UASSERT(peer_id == PEER_ID_SERVER);
delete pkt;
} }
// Check peer handlers // Check peer handlers