Pass SharedBuffer as value to increment reference count
authorLoïc Blot <loic.blot@unix-experience.fr>
Mon, 28 Aug 2017 15:12:30 +0000 (17:12 +0200)
committerLoïc Blot <loic.blot@unix-experience.fr>
Mon, 28 Aug 2017 15:12:46 +0000 (17:12 +0200)
This should fix #6332
Refcount is not increased due to reference, it can make this refcount incorrect in a multithread context

src/network/connectionthreads.cpp
src/network/connectionthreads.h

index b07acd4695d37a70386d802de83a8d50dd3e89dc..63c1855c5036d8b04160ddb9e0bc846edbf4957e 100644 (file)
@@ -1098,7 +1098,7 @@ bool ConnectionReceiveThread::checkIncomingBuffers(Channel *channel,
 }
 
 SharedBuffer<u8> ConnectionReceiveThread::processPacket(Channel *channel,
-       SharedBuffer<u8> &packetdata, u16 peer_id, u8 channelnum, bool reliable)
+       SharedBuffer<u8> packetdata, u16 peer_id, u8 channelnum, bool reliable)
 {
        PeerHelper peer = m_connection->getPeerNoEx(peer_id);
 
@@ -1137,7 +1137,7 @@ const ConnectionReceiveThread::PacketTypeHandler
 };
 
 SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *channel,
-       SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum, bool reliable)
+       SharedBuffer<u8> packetdata, Peer *peer, u8 channelnum, bool reliable)
 {
        if (packetdata.getSize() < 2)
                throw InvalidIncomingDataException("packetdata.getSize() < 2");
@@ -1247,7 +1247,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Control(Channel *chan
 }
 
 SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Original(Channel *channel,
-       SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum, bool reliable)
+       SharedBuffer<u8> packetdata, Peer *peer, u8 channelnum, bool reliable)
 {
        if (packetdata.getSize() <= ORIGINAL_HEADER_SIZE)
                throw InvalidIncomingDataException
@@ -1261,7 +1261,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Original(Channel *cha
 }
 
 SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Split(Channel *channel,
-       SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum, bool reliable)
+       SharedBuffer<u8> packetdata, Peer *peer, u8 channelnum, bool reliable)
 {
        Address peer_address;
 
@@ -1292,7 +1292,7 @@ SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Split(Channel *channe
 }
 
 SharedBuffer<u8> ConnectionReceiveThread::handlePacketType_Reliable(Channel *channel,
-       SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum, bool reliable)
+       SharedBuffer<u8> packetdata, Peer *peer, u8 channelnum, bool reliable)
 {
        assert(channel != NULL);
 
index 11bec0c6cb5d5c52dfc084d3966d5c9ce5d723a1..c2314f87fe9b4a82ba7cd456e31b536e50bd3cab 100644 (file)
@@ -118,26 +118,26 @@ private:
                        channelnum: channel on which the packet was sent
                        reliable: true if recursing into a reliable packet
        */
-       SharedBuffer<u8> processPacket(Channel *channel, SharedBuffer<u8> &packetdata,
+       SharedBuffer<u8> processPacket(Channel *channel, SharedBuffer<u8> packetdata,
                        u16 peer_id, u8 channelnum, bool reliable);
 
        SharedBuffer<u8> handlePacketType_Control(Channel *channel,
-                       SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum,
+                       SharedBuffer<u8> packetdata, Peer *peer, u8 channelnum,
                        bool reliable);
        SharedBuffer<u8> handlePacketType_Original(Channel *channel,
-                       SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum,
+                       SharedBuffer<u8> packetdata, Peer *peer, u8 channelnum,
                        bool reliable);
        SharedBuffer<u8> handlePacketType_Split(Channel *channel,
-                       SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum,
+                       SharedBuffer<u8> packetdata, Peer *peer, u8 channelnum,
                        bool reliable);
        SharedBuffer<u8> handlePacketType_Reliable(Channel *channel,
-                       SharedBuffer<u8> &packetdata, Peer *peer, u8 channelnum,
+                       SharedBuffer<u8> packetdata, Peer *peer, u8 channelnum,
                        bool reliable);
 
        struct PacketTypeHandler
        {
                SharedBuffer<u8> (ConnectionReceiveThread::*handler)(Channel *channel,
-                               SharedBuffer<u8> &packet, Peer *peer, u8 channelnum,
+                               SharedBuffer<u8> packet, Peer *peer, u8 channelnum,
                                bool reliable);
        };