Fix some memory leaks on packet sending.
authorLoic Blot <loic.blot@unix-experience.fr>
Sat, 21 Feb 2015 16:24:27 +0000 (17:24 +0100)
committerLoic Blot <loic.blot@unix-experience.fr>
Sat, 21 Feb 2015 16:27:31 +0000 (17:27 +0100)
src/client.cpp
src/network/connection.cpp
src/server.cpp
src/test.cpp

index 17661d0c1f30c5dc9760f4c2832faabd58618e61..68815e8e67ecc284baddaacfffa55fc77c6b4bef 100644 (file)
@@ -956,6 +956,7 @@ void Client::Send(NetworkPacket* pkt)
                serverCommandFactoryTable[pkt->getCommand()].channel,
                pkt,
                serverCommandFactoryTable[pkt->getCommand()].reliable);
+       delete pkt;
 }
 
 void Client::interact(u8 action, const PointedThing& pointed)
index 5c529faea81d2dc2c809866de006aa3357b8673c..7710b1c42533d1faaced5e1b3ea6bacdbb4c61d9 100644 (file)
@@ -1729,6 +1729,7 @@ void ConnectionSendThread::connect(Address address)
        m_connection->SetPeerID(PEER_ID_INEXISTENT);
        NetworkPacket* pkt = new NetworkPacket(0,0);
        m_connection->Send(PEER_ID_SERVER, 0, pkt, true);
+       delete pkt;
 }
 
 void ConnectionSendThread::disconnect()
index 6c51aec4b71c574aebd4fe671638c52dd5ca693a..6a1e8085b530b5c8f343239d511a30540085d5fe 100644 (file)
@@ -2079,24 +2079,19 @@ void Server::sendRemoveNode(v3s16 p, u16 ignore_id,
        float maxd = far_d_nodes*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;
 
        std::list<u16> clients = m_clients.getClientIDs();
        for(std::list<u16>::iterator
                i = clients.begin();
-               i != clients.end(); ++i)
-       {
-               if(far_players)
-               {
+               i != clients.end(); ++i) {
+               if(far_players) {
                        // Get player
-                       Player *player = m_env->getPlayer(*i);
-                       if(player)
-                       {
+                       if(Player *player = m_env->getPlayer(*i)) {
                                // If player is far away, only set modified blocks not sent
                                v3f player_pos = player->getPosition();
-                               if(player_pos.getDistanceFrom(p_f) > maxd)
-                               {
+                               if(player_pos.getDistanceFrom(p_f) > maxd) {
                                        far_players->push_back(*i);
                                        continue;
                                }
@@ -2118,7 +2113,7 @@ void Server::sendAddNode(v3s16 p, MapNode n, u16 ignore_id,
        v3f p_f = intToFloat(p, BS);
 
        std::list<u16> clients = m_clients.getClientIDs();
-               for(std::list<u16>::iterator
+       for(std::list<u16>::iterator
                        i = clients.begin();
                        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();
                RemoteClient* client = m_clients.lockedGetClientNoEx(*i);
                if (client != 0) {
index 40943035d1287404acf382463fee4416ed0f6377..3b7c75c6e2bdac3090bdc71c6909ffccbceeebfd 100644 (file)
@@ -2010,6 +2010,8 @@ struct TestConnection: public TestBase
                                        << std::endl;
 
                        UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0);
+
+                       delete pkt;
                }
 
                u16 peer_id_client = 2;
@@ -2074,6 +2076,8 @@ struct TestConnection: public TestBase
 
                        UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0);
                        UASSERT(peer_id == PEER_ID_SERVER);
+
+                       delete pkt;
                }
 
                // Check peer handlers