Server GotBlocks(): Lock clients to avoid multithreading issues

master
SmallJoker 2021-02-02 19:10:35 +01:00
parent 40ad976753
commit 7ebd5da9cd
1 changed files with 4 additions and 2 deletions

View File

@ -438,18 +438,20 @@ void Server::handleCommand_GotBlocks(NetworkPacket* pkt)
u8 count; u8 count;
*pkt >> count; *pkt >> count;
RemoteClient *client = getClient(pkt->getPeerId());
if ((s16)pkt->getSize() < 1 + (int)count * 6) { if ((s16)pkt->getSize() < 1 + (int)count * 6) {
throw con::InvalidIncomingDataException throw con::InvalidIncomingDataException
("GOTBLOCKS length is too short"); ("GOTBLOCKS length is too short");
} }
m_clients.lock();
RemoteClient *client = m_clients.lockedGetClientNoEx(pkt->getPeerId());
for (u16 i = 0; i < count; i++) { for (u16 i = 0; i < count; i++) {
v3s16 p; v3s16 p;
*pkt >> p; *pkt >> p;
client->GotBlock(p); client->GotBlock(p);
} }
m_clients.unlock();
} }
void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao, void Server::process_PlayerPos(RemotePlayer *player, PlayerSAO *playersao,