mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-03 16:55:24 +01:00 
			
		
		
		
	Pass SharedBuffer as value to increment reference count
This should fix #6332 Refcount is not increased due to reference, it can make this refcount incorrect in a multithread context
This commit is contained in:
		@@ -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);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user